初始赋值后使变量不可变
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
}()
有没有办法让一个变量在 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
}()