在 Swift 初始值设定项中分配给常量

Assigning to constant in Swift initializer

在我的 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, 他们说:

You can assign a value to a constant property at any point during initialization, as long as it is set to a definite value by the time initialization finishes.

我不明白。这不应该工作吗?我在网上搜索了很多但找不到任何东西。我正在考虑将其作为一个变量,但我觉得那样会放弃。 :)

根据您在 post 中引用的文档,您必须始终初始化 superclass 才能在 class.

中使用 self

您的 class 继承自什么 class?让我们假设它继承自,在这种情况下你的初始化器将是一个方便的初始化器,方便的初始化器可以调用本地初始化器,所以你的代码看起来像这样:

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

如果您从具有类似初始值设定项的 class 继承,您将覆盖它并调用超级初始值设定项,如下所示:

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

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

let r: Double

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

中给它另一个值

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

例如:

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

init() {
    self.r = 0
}

You can assign a value to a constant property at any point during initialization, as long as it is set to a definite value by the time initialization finishes. Once a constant property is assigned a value, it can’t be further modified.

您可以定义常量 属性 而无需赋值

let r:Double // = 0

那么你可以:

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