初始赋值后使变量不可变

问题描述 投票:0回答:2

有没有一种方法可以使变量在初始化/分配后不可变,以便它可以在某一时刻发生变化,但后来又变得不可变?我知道我可以创建一个新的 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
    
swift immutability
2个回答
4
投票
您可以使用内联闭包初始化变量:

let x: Int = { var x = 0 while x < 100 { x += 1 } return x }()
    

3
投票
据我所知,您无法稍后将

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'
    
© www.soinside.com 2019 - 2024. All rights reserved.