对于下面的代码,我有一个变量,它在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)
}
我希望做的是将变量设置为常量,但是在整个项目中仍然可以访问它。问题是,如果我将变量设置为常量,那么就不能在运行时为该常量赋值。
我不能百分之百确定将值设置为变量的常量有什么好处,但我觉得我可以更轻松地阅读代码。
最佳答案
在Swift中,private
允许从同一源文件中的所有代码进行访问。您可以将setter设为私有,将getter设为公共,如下所示:
private(set) public var myDevice: String!
也许这更接近你想要的。
更新
您可以使用
willSet
(即使在全局变量上),如下所示:public var myDevice: String! {
willSet {
if myDevice != nil {
fatalError()
}
}
}
您只能将其设置为非零值一次,并且不能将其更改回零。