有什么方法可以防止一段时间后对变量进行更改?

时间:2019-02-18 06:10:53

标签: swift

我希望最初一直修改变量直到结束,然后再保护和保留同一变量中的值,并防止对该变量进行更多更改。

为此,我知道在Java中,我可以将当​​前变量的值交换为temp变量,销毁旧变量,然后将旧变量重新初始化为常量以存储temp的值。 或使用条件循环继续检查标志。 但我正在寻找其他解决方案

///I need something like this:

var manager = true
var version = 0.0 //initial value
while (true){
  switch (choice){
    case 1:{version += 1.0} //changes permitted
    case 0:{break}
  }
  if (manager == false){
    //something here to prevent any more changes to version variable
    break
  }
}

version += 1.0 // should not be possible now

此过程之后,version变量此后必须是不可变的。

1 个答案:

答案 0 :(得分:2)

swift 4.2 / Xcode 10.1:

您可以使用属性观察器(willSet / didSet)进行几乎所有操作。

例如:

class Versions {

    var manager = true

    var version: Float {

        willSet(toNewVersion) {

            print("\nVersion will be set:")
            print("from current value: \(version)")
            print("to version value: \(toNewVersion).\n")

        }

        didSet(fromOldVersion) {

            print("Version was changed:")
            print("from current value: \(fromOldVersion)")
            print("to version value: \(version).\n")

            //use each one (if) you need.
            if version > 4.1 {
                print("Prevent Changes.")
                version = fromOldVersion
            }

            if manager == false {
                print("Prevent Changes(Got False).\n")
                version = fromOldVersion
            }
        }
    }

    init(version:Float) {
        self.version = version
    }
}
  • willSet在值存储之前被调用。
  • 存储新值后,将调用
  • didSet

一些结果:

let app: Versions = Versions(version: 1.0)

app.version = 1.1
print("version number is \(app.version)") //version number is 1.1

app.version = 2.4
print("version number is \(app.version)") //version number is 2.4

app.version = 5.0
print("version number is \(app.version)") //version number is 2.4

app.manager = false

app.version = 3.5
print("version number is \(app.version)") /*version number is 2.4*/