[英]Implicitly Unwrapped Optionals in Swift does not seem to work
我正在研究《快速編程語言》這本書,以研究強大的參考周期。 無法正常工作的示例之一無法用Xcode編譯。 我不明白為什么代碼被破壞了。
在本章中 ,有一個示例如下所示:
當我嘗試在Xcode中編譯此代碼時,拋出此錯誤: 在初始化所有存儲的屬性之前使用了'self' 。 但是,我認為它應該能夠編譯,因為我將capitalCity設置為默認情況下為nil隱式解包Optionals,因此在設置self.name = name之后,所有存儲的屬性都應已正確設置。
我在這里想念什么? 需要進行哪些更改才能使代碼編譯?
提前致謝!
let
語句沒有將可選的默認初始化初始化為nil,因為否則編寫let foo:Bar!
會給你一個永遠為零的foo
,而你不能在隨后的語句中初始化它。
var
之所以合適,是因為您希望默認初始化為nil發生,以便您可以使用self引用初始化City
對象,以便最終初始化您的實際capitalCity
值,這實際上是兩次初始化。
該代碼在設計上具有循環類依賴關系,因此這是該設計的副作用。
let
這種行為在Swift 1.2中是新的,請在Xcode 6.2或更早版本中嘗試該示例,您會發現它可以編譯。
由於初始化程序尚未設置該對象,因此無法使用該對象初始化另一個對象。
您需要初始化城市,然后設置屬性。
只需更改(將其更改為var)
let capitalCity: City!
至
var capitalCity: City!
之所以會發生這種情況,可能是因為它不能為恆定值,因為我們在初始化期間進行了設置。
更新:
我不知道為什么我被否決! 這是本書中的示例,無法編譯。 但是,如果您按照我說的那樣將var更改為var,就可以使用它!
誰可以在這里提供代碼修改,以便可以編譯THE BOOK中的代碼!
我只能承認我不應該寫關於在初始化程序中設置let的文章,但是我認為很明顯,我並不是說您不能在初始化程序中設置常規let。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.