对于下面的代码,我有一个变量,它在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()
        }
    }
}

您只能将其设置为非零值一次,并且不能将其更改回零。

09-26 18:46