在 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
}
在我的 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
}