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

问题描述 投票:1回答:1

我想最初继续修改变量until和point,之后我想保护并保留同一变量中的值,并防止对它进行任何更改。

为此,我知道在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

在该过程之后,版本变量此后必须是不可变的。

swift
1个回答
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*/
© www.soinside.com 2019 - 2024. All rights reserved.