2015-09-01 49 views
1

與理解的語言更好的目標斯威夫特問題:重新分配斯威夫特讓變量

我明白varlet

var之間的差異是可變的

let是最終

我假設這些都寫入堆棧。一旦創建了變量,就會設置它存儲的對象類。是否有可能改變這一點?

let myVar = String("Hello") 
// myVar.dynamicType is String 
myVar.delete 

let myVar = Int(123) 
myVar.dynamicType is Int 

有沒有辦法爲變量重新分配內存?我想在代碼的不同部分使用相同的變量名錶示不同的事物。

+4

請放棄這個想法!這是每種語言的糟糕設計 –

+0

這看起來很腥。最壞的情況是,使用'do {...}'的本地作用域,或者使用某種聯合類型。 –

回答

1

標識符在夫特(常量和可變的),因爲在大多數其它靜態類型檢查的編程語言,具有範圍(見Wikipedia entry),它定義其有效性的程度。範圍可以是函數的主體,文件,模塊或for循環的主體。在像Swift這樣的語言中,你不能在相同範圍內的兩個不同的值或內存單元重複使用相同的標識符,但是你可以在兩個不同的範圍內完成。所以你的問題的答案是:你不能在相同的範圍內完成,但你可以在不同的範圍內完成。但是,請注意,您沒有使用與內存不同的內存(在var的情況下)或不同的值(在let的情況下)相關的名稱相同的內存。

其實你不能delete既不與標識符相關聯的值,也不是存儲器本身(因爲它似乎在你的例子中可能是可能的)。在任何具有堆棧分配實體的語言中,這是不可能的,因爲在當前代碼塊結束時從堆棧恢復是自動的。