如何初始化变量,但一旦完成,其值就是最终的

inf*_*eqd 12 swift

我在Swift View Controller中有一个模型对象变量.我想做的事情是,在初始化VC时,我没有它的价值.但是在异步网络调用之后,我有解析的模型对象,这是该变量应该保存的,但从那时起,我不想要任何东西来改变模型变量的值.

在Swift中可以这样做吗?如果有,怎么样?

Een*_*dje 14

基于Babul Prabhakar的回答,但更干净一点.

方法1:

var test: String? { didSet { test = oldValue ?? test } }

test = "Initial string"
test = "Some other string"
test = "Lets try one last time"

print(test) // "Initial string"
Run Code Online (Sandbox Code Playgroud)

编辑:缩短时间

方法2:

let value: String
value = "Initial string"
Run Code Online (Sandbox Code Playgroud)

我想第二种方法是Swift的"内置"选项来声明一次变量.只有在声明之后立即分配变量时才可以这样做.


Bab*_*kar 8

你能做的是

private var myPrivateVar:String?;

var publicGetter:String {
    set {
        if myPrivateVar == nil {
            myPrivateVar = newValue;

        }

    }
    get {
        return myPrivateVar!;
    }
}
Run Code Online (Sandbox Code Playgroud)