有沒有辦法在初始化/分配變數后使變數不可變,以便它可以在某一點更改,但后來變得不可變?我知道我可以創建一個新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
uj5u.com熱心網友回復:
您可以使用行內閉包初始化變數:
let x: Int = {
var x = 0
while x < 100 {
x = 1
}
return x
}()
uj5u.com熱心網友回復:
我不知道這可以讓您稍后將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'
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450990.html
