初始赋值后使变量不可变

Make variable immutable after initial assignment

有没有办法让一个变量在 initializing/assigning之后不可变,这样它可以在某一时刻改变,但后来变得不可变?我知道我可以创建一个新的 let 变量,但是有没有办法在不创建新变量的情况下这样做?

如果不是,安全地确保变量在需要更改后不被更改的最佳做法是什么? 我要完成的示例:

var x = 0         //VARIABLE DECLARATION


while x < 100 {   //VARIABLE IS CHANGED AT SOME POINT
    x += 1
}

x = let x        //MAKE VARIABLE IMMUTABLE AFTER SOME FUNCTION IS PERFORMED


x += 5          //what I'm going for: ERROR - CANNOT ASSIGN TO IMMUTABLE VARIABLE

据我所知,您以后无法将 var 变量更改为 let 常量。但是您 可以 将您的常量声明为 let 开始而不是立即给它一个值。

let x: Int /// No initial value

x = 100 /// This works.

x += 5 /// Mutating operator '+=' may not be used on immutable value 'x'

只要您在使用常量之前的某个时间为其赋值,就可以了,因为编译器可以确定它最终会被填充。例如 if else 有效,因为其中一个条件分支肯定会被调用。

let x: Int

if 5 < 10 {
    x = 0 /// This also works.
} else {
    x = 1 /// Either the first block or the `else` will be called.
}

x += 5 /// Mutating operator '+=' may not be used on immutable value 'x'

您可以使用内联闭包初始化变量:

let x: Int = {
    var x = 0

    while x < 100 {
        x += 1
    }

    return x
}()