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
    }
}

祝你有美好的一天。 :) 协议扩展真好。