有没有一种方法可以使变量在初始化/分配后不可变,以便它可以在某一时刻发生变化,但后来又变得不可变?我知道我可以创建一个新的 let
变量,但是有没有办法在不创建新变量的情况下做到这一点?如果不是,那么安全地确保变量在需要时不被更改的最佳实践是什么? 我想要完成的示例:
var x = 0 //VARIABLE DECLARATION
x += 1 //VARIABLE IS CHANGED AT SOME POINT
x = let x //MAKE VARIABLE IMMUTABLE AFTER SOME FUNCTION IS PERFORMED
x += 5 //what I'm going for: ERROR - CANNOT ASSIGN TO IMMUTABLE VARIABLE
let x: Int = {
var x = 0
while x < 100 {
x += 1
}
return x
}()
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'