在运行时创建常量,但在其他函数中访问常量

时间:2015-12-07 05:53:54

标签: swift variables sprite-kit constants

对于下面的代码,我有一个在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%确定将值设置为变量的常量有什么好处,但我觉得我可以更容易地阅读代码。

1 个答案:

答案 0 :(得分:1)

在Swift中,private允许从同一源文件中的所有代码进行访问。您可以将setter设为私有状态,将getter设为公共状态:

private(set) public var myDevice: String!

也许这更接近你想要的。

更新

您可以使用willSet(甚至是全局变量),如下所示:

public var myDevice: String! {
    willSet {
        if myDevice != nil {
            fatalError()
        }
    }
}

您只能将其设置为非零值,并且无法将其更改为nil。