Swift init 的协议扩展自引用问题
Swift protocol extension self reference issues with init
我正在寻找一种通过协议扩展向协议添加默认初始化程序的方法。
我的协议是:
protocol TestProtocol {
var myVar : Double { get set }
init(value: Double)
init(existingStruct : TestProtocol)
}
我已经使用此协议实现了一个结构:
struct TestStruct : TestProtocol {
var myVar : Double
init(value : Double) {
myVar = value
}
init (existingStruct : TestProtocol) {
myVar = existingStruct.myVar
}
}
但是,如果我尝试通过 extension 为该协议创建默认初始化程序,我 运行 会陷入自我问题:
extension TestProtocol {
init(value : Double) {
myVar = value
}
init(existingStruct : TestProtocol) {
myVar = existingStruct.myVar
}
}
两个分配行都发出错误
变量'self'在初始化前通过引用传递
有没有办法让这个工作 - 还是我只能使用 类?
你的问题和我昨天回答的几乎一样
这是解决这个问题的诀窍:)
protocol TestProtocol {
var myVar : Double { get set }
init() // designated initializer which will ensure that your class or structer type will instantiate correctly
}
struct TestStruct : TestProtocol {
var myVar : Double
init() {
myVar = 0
}
}
extension TestProtocol {
init(value : Double) {
self.init()
myVar = value
}
init(existingStruct : TestProtocol) {
self.init()
myVar = existingStruct.myVar
}
}
祝你有美好的一天。 :) 协议扩展真好。
我正在寻找一种通过协议扩展向协议添加默认初始化程序的方法。
我的协议是:
protocol TestProtocol {
var myVar : Double { get set }
init(value: Double)
init(existingStruct : TestProtocol)
}
我已经使用此协议实现了一个结构:
struct TestStruct : TestProtocol {
var myVar : Double
init(value : Double) {
myVar = value
}
init (existingStruct : TestProtocol) {
myVar = existingStruct.myVar
}
}
但是,如果我尝试通过 extension 为该协议创建默认初始化程序,我 运行 会陷入自我问题:
extension TestProtocol {
init(value : Double) {
myVar = value
}
init(existingStruct : TestProtocol) {
myVar = existingStruct.myVar
}
}
两个分配行都发出错误 变量'self'在初始化前通过引用传递
有没有办法让这个工作 - 还是我只能使用 类?
你的问题和我昨天回答的
这是解决这个问题的诀窍:)
protocol TestProtocol {
var myVar : Double { get set }
init() // designated initializer which will ensure that your class or structer type will instantiate correctly
}
struct TestStruct : TestProtocol {
var myVar : Double
init() {
myVar = 0
}
}
extension TestProtocol {
init(value : Double) {
self.init()
myVar = value
}
init(existingStruct : TestProtocol) {
self.init()
myVar = existingStruct.myVar
}
}
祝你有美好的一天。 :) 协议扩展真好。