我正在關注Ray Wenderlich的網站關於Swift中ARC的一個教程,我很想知道爲什麼在操場上創建一個類時,可選的允許但不是隱式的可選項?爲什麼在類的init方法中不需要隱式的可選項?
操場代碼我至今是:
class User {
var name: String
init(name: String) {
self.name = name
print("User \(name) is initialized")
}
deinit {
print("User \(name) is being deallocated")
}
}
class Phone {
let model: String
var owner: User?
init(model: String) {
self.model = model
print("Phone \(model) is initialized")
}
deinit {
print("Phone \(model) is being deallocated")
}
}
do {
let user1 = User(name: "John")
}
let user2 = User.init(name: "Berry")
在手機類,如果我改變了所有者變量的隱式可選的感嘆號,然後在操場不但是如果拋出一個錯誤我刪除了問號或者不要讓它成爲可選的,然後我收到一個錯誤。
不隱式可選強制應用程序崩潰,如果它沒有設置?
任何幫助被理解爲深刻理解爲什麼隱式可選是好的。
在你的例子'let owner = aPhone.owner'不應該導致一個異常。它應該導致所有者擁有'String?'類型和一個零值。解引用所有者將導致異常。將最後一行更改爲'let owner = aPhone.owner.name'將導致異常。 –
謝謝。修正了。 – Paulw11