【问题标题】:Assigning to constant in Swift initializer在 Swift 初始化程序中赋值给常量
【发布时间】:2015-08-22 09:33:55
【问题描述】:

在我的Ball.swift 文件中,我声明了以下变量:

let r:Double = 0

现在我有以下初始化程序:

init(x:Double, y:Double, radius:Double) {
    self.r = radius
}

我收到以下错误:

Cannot assign to 'r' in 'self'

但是,在 Apple 的 Swift 文档 here, 中,他们说:

你可以在任何时候给一个常量属性赋值 初始化,只要设置成一个确定的值 初始化完成。

我不明白。这不应该工作吗?我在网上搜索了很多,但找不到任何东西。我想把它变成一个变量,但我觉得那会放弃。 :)

【问题讨论】:

    标签: ios swift constants


    【解决方案1】:

    你需要声明r没有初始值,像这样:

    let r: Double
    

    从 Swift 1.2 开始,一个常量只能赋值一次。如果你给它一个默认值,你不能在init中给它另一个值。

    【讨论】:

    • 感谢您的快速回答!这解决了它!
    【解决方案2】:

    根据您在帖子中引用的文档,您必须始终初始化超类,然后才能在您的类中使用 self。

    你的类继承自哪个类?假设它继承自,在这种情况下,您的初始化程序将是一个便捷初始化程序,便捷初始化程序可以只调用本地初始化程序,因此您的代码如下所示:

    convenience init(x:Double, y:Double, radius:Double) {
        self.init()
        self.r = radius
    }
    

    另一方面,如果您从具有类似初始化程序的类继承,您将覆盖它并调用超级初始化程序,如下所示:

    override init(x:Double, y:Double, radius:Double) {
        super.init(x, y, radius)
        self.r = radius
    }
    

    【讨论】:

      【解决方案3】:

      您可以在初始化期间的任何时候为常量属性赋值,只要在初始化完成时将其设置为确定的值即可。 一旦给常量属性赋值,就不能再修改了

      你可以定义一个不赋值的常量属性

      let r:Double // = 0
      

      那么你可以:

      init(x:Double, y:Double, radius:Double) {
          self.r = radius
      }
      

      【讨论】:

        【解决方案4】:

        你一开始是给let r:Double = 0,然后你在初始化函数中改变它。这不是它的工作方式。

        例如:

        let r : Double
        init(x:Double, y:Double, radius:Double) {
            self.r = radius
        }
        
        init() {
            self.r = 0
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-06
          • 2014-08-17
          • 1970-01-01
          • 2014-05-25
          • 2016-10-20
          • 1970-01-01
          相关资源
          最近更新 更多