我想為協議中的初始化程式指定一個默認實作,以便我可以在所有符合特定協議的結構上運行代碼。
我有以下示例:
protocol ProtWithInit {
init()
}
extension ProtWithInit {
init() {
self.init()
print("Hello protocol")
}
}
struct MyStruct {}
extension MyStruct: ProtWithInit {}
let myStruct = MyStruct()
我希望MyStruct()呼叫做的是輸出“Hello 協議”。但是,當我運行上面的代碼時,什么都沒有輸出。
此外,我想添加到結構中的初始化程式。因此,例如在我添加print("Hello struct")到初始化程式的結構中,這將同時輸出hello protocoland hello struct。
有什么辦法可以做到這一點?
uj5u.com熱心網友回復:
如果它做了任何事情,這將是一個無限回圈:
extension ProtWithInit {
init() {
self.init()
print("Hello protocol")
}
}
結構和協議不是類。它們沒有類繼承。(即使這是一個類,這將是一個無限回圈,因為self.init()會init()再次呼叫。)
回到你的呼叫代碼,你說的代碼“這樣我就可以在所有符合特定協議的結構上運行代碼”。該代碼是什么樣的。它實際上對真實型別有什么要求?用它來制定你的協議。例如,以下內容類似于您所描述的內容:
extension ProtWithInit {
static func create() -> Self {
print("Hello protocol")
return Self.init()
}
}
let myStruct = MyStruct.create()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/483961.html
上一篇:陣列的表示
