宣告在初始化階段設定的屬性時,是否應將其設定為可選項?還是作為臨時物件?
見grimoireMemento屬性:
可選示例:
class Kokoro{
private var emot:String = ""
var pain:[String:Int] = [:]
private var grimoireMemento:GrimoireMemento?
var toHeart:[String:String] = [:]
var fromHeart:[String:String] = [:]
var standBy:Bool = false
init(absDictionaryDB: AbsDictionaryDB) {
self.grimoireMemento = GrimoireMemento(absDictionaryDB: absDictionaryDB)
}
func getPain(biJuuName: String) -> Int {
return pain[biJuuName] ?? 0
}
func getGrimoireMemento()->GrimoireMemento{
return self.grimoireMemento!
}
}
與臨時物件參考(我假設將由垃圾收集器處理)相比:
class Kokoro{
private var emot:String = ""
var pain:[String:Int] = [:]
var grimoireMemento:GrimoireMemento = GrimoireMemento(absDictionaryDB: AbsDictionaryDB())
var toHeart:[String:String] = [:]
var fromHeart:[String:String] = [:]
var standBy:Bool = false
init(absDictionaryDB: AbsDictionaryDB) {
self.grimoireMemento = GrimoireMemento(absDictionaryDB: absDictionaryDB)
}
func getPain(biJuuName: String) -> Int {
return pain[biJuuName] ?? 0
}
}
對于grimoireMemento屬性,應該使用 2 個示例中的哪一個?
uj5u.com熱心網友回復:
類的所有存盤屬性(包括該類從其超類繼承的任何屬性)都必須在初始化期間分配一個初始值。
這意味著您無需考慮在初始化程式之外分配備份默認值。您的兩個代碼片段在功能上并不相似,但您似乎想要其中之一。
private(set) var grimoireMemento: GrimoireMemento
let grimoireMemento: GrimoireMemento
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/497943.html
