Swift let 在 类 中是可变的,为什么?
Swift let is mutable in classes why?
大家好,我想弄清楚为什么下面的 swift 代码允许我为 class 中的 wee 字符串分配一个新值。我认为 let 是不可变的,但它在这里有效。有人可以解释一下吗?谢谢
import Foundation
class MyClass {
let wee:String
init?(inInt:Int) {
let j:String = "what"
//j = "I shouldn't be able to do this wiht let" // error rightly so
//println(j)
self.wee = "wow"
if inInt != 2 {
return nil
}
self.wee = "hey"
self.wee = "blas" // I shouldn't be able to do this
}
}
if let myClass:MyClass = MyClass(inInt: 2) {
myClass.wee // prints blas
}
因为您是在初始化程序中分配它的,所以在创建 class 的对象时。我只是假设,它采用任何最后给定的值,然后创建一个常量。
如果你想在不同的功能中尝试相同的东西,那是行不通的。你会得到一个错误。
Swift 编程语言 的 Initialization 部分下的 "Modifying Constant Properties During Initialization" 标题说:
You can modify the value of a constant property at any point during
initialization, as long as it is set to a definite value by the time
initialization finishes.
从字里行间,考虑到您的示例,这听起来很像是对设置常量值的限制不适用于初始化。支持该想法的进一步证据出现在同一部分的前面:
When you assign a default value to a stored property, or set its
initial value within an initializer, the value of that property is set
directly, without calling any property observers.
属性 的访问器强制存储的 属性 的稳定性并非不可能。如果在初始化期间不使用这些访问器,那么在初始化期间您可以根据需要多次修改常量 属性 是有意义的。
您无法在首次设置后修改示例中的 j
,这是因为 j
是局部常量,而不是 属性。 j
可能根本没有任何访问器——相反,编译器可能会强制执行本地 constants/variables.
的访问规则
swift 4 中不可能。
Apple docs says:
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.
大家好,我想弄清楚为什么下面的 swift 代码允许我为 class 中的 wee 字符串分配一个新值。我认为 let 是不可变的,但它在这里有效。有人可以解释一下吗?谢谢
import Foundation
class MyClass {
let wee:String
init?(inInt:Int) {
let j:String = "what"
//j = "I shouldn't be able to do this wiht let" // error rightly so
//println(j)
self.wee = "wow"
if inInt != 2 {
return nil
}
self.wee = "hey"
self.wee = "blas" // I shouldn't be able to do this
}
}
if let myClass:MyClass = MyClass(inInt: 2) {
myClass.wee // prints blas
}
因为您是在初始化程序中分配它的,所以在创建 class 的对象时。我只是假设,它采用任何最后给定的值,然后创建一个常量。
如果你想在不同的功能中尝试相同的东西,那是行不通的。你会得到一个错误。
Swift 编程语言 的 Initialization 部分下的 "Modifying Constant Properties During Initialization" 标题说:
You can modify the value of a constant property at any point during initialization, as long as it is set to a definite value by the time initialization finishes.
从字里行间,考虑到您的示例,这听起来很像是对设置常量值的限制不适用于初始化。支持该想法的进一步证据出现在同一部分的前面:
When you assign a default value to a stored property, or set its initial value within an initializer, the value of that property is set directly, without calling any property observers.
属性 的访问器强制存储的 属性 的稳定性并非不可能。如果在初始化期间不使用这些访问器,那么在初始化期间您可以根据需要多次修改常量 属性 是有意义的。
您无法在首次设置后修改示例中的 j
,这是因为 j
是局部常量,而不是 属性。 j
可能根本没有任何访问器——相反,编译器可能会强制执行本地 constants/variables.
swift 4 中不可能。 Apple docs says:
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.