对于下面的代码,我有一个在didMoveToView函数中赋值的变量。分配值后,此变量不会再次更改其值。
var myDevice: String!
override func didMoveToView(view: SKView) {
if frame.size.height == 480 {
myDevice = "iPhone 4"
} else if frame.size.height == 568 {
myDevice = "iPhone5"
} else {
myDevice = "iPhone 6 or 6 plus"
}
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
print(myDevice)
}
我希望做的是将变量设置为常量,但仍然可以通过项目访问它。这个问题是,如果我将变量设置为常量,那么我就不能在运行时为该常量赋值。
我不是100%确定将值设置为变量的常量有什么好处,但我觉得我可以更容易地阅读代码。
答案 0 :(得分:1)
在Swift中,private
允许从同一源文件中的所有代码进行访问。您可以将setter设为私有状态,将getter设为公共状态:
private(set) public var myDevice: String!
也许这更接近你想要的。
您可以使用willSet
(甚至是全局变量),如下所示:
public var myDevice: String! {
willSet {
if myDevice != nil {
fatalError()
}
}
}
您只能将其设置为非零值,并且无法将其更改为nil。