协议中的默认初始化器
Default initializer in protocol
我想为协议中的初始值设定项指定一个默认实现,这样我就可以运行对符合特定协议的所有结构进行编码。
我有以下例子:
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 protocol
和 hello struct
.
有什么办法可以实现吗?
如果它做了任何事情,这将是一个无限循环:
extension ProtWithInit {
init() {
self.init()
print("Hello protocol")
}
}
结构和协议不是 class。他们没有 class-like 继承权。 (即使这是 class,这也将是一个无限循环,因为 self.init()
只会再次调用 init()
。)
回到你的调用代码,你说的代码“这样我就可以 运行 对所有符合特定协议的结构进行编码。” 代码是什么样的。它对真实类型的实际要求是什么?用它来制定你的协议。例如,以下内容与您所描述的类似:
extension ProtWithInit {
static func create() -> Self {
print("Hello protocol")
return Self.init()
}
}
let myStruct = MyStruct.create()
我想为协议中的初始值设定项指定一个默认实现,这样我就可以运行对符合特定协议的所有结构进行编码。
我有以下例子:
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 protocol
和 hello struct
.
有什么办法可以实现吗?
如果它做了任何事情,这将是一个无限循环:
extension ProtWithInit {
init() {
self.init()
print("Hello protocol")
}
}
结构和协议不是 class。他们没有 class-like 继承权。 (即使这是 class,这也将是一个无限循环,因为 self.init()
只会再次调用 init()
。)
回到你的调用代码,你说的代码“这样我就可以 运行 对所有符合特定协议的结构进行编码。” 代码是什么样的。它对真实类型的实际要求是什么?用它来制定你的协议。例如,以下内容与您所描述的类似:
extension ProtWithInit {
static func create() -> Self {
print("Hello protocol")
return Self.init()
}
}
let myStruct = MyStruct.create()