gpt4 book ai didi

ios - init 的 Swift 协议(protocol)扩展自引用问题

转载 作者:IT王子 更新时间:2023-10-29 05:23:09 24 4
gpt4 key购买 nike

我正在寻找一种通过协议(protocol)扩展向协议(protocol)添加默认初始化器的方法。

我的协议(protocol)是:

protocol TestProtocol {
var myVar : Double { get set }
init(value: Double)
init(existingStruct : TestProtocol)
}

我已经使用这个协议(protocol)实现了一个结构:

struct TestStruct : TestProtocol {
var myVar : Double

init(value : Double) {
myVar = value
}

init (existingStruct : TestProtocol) {
myVar = existingStruct.myVar
}
}

但是,如果我尝试通过扩展 为该协议(protocol)创建一个默认初始化器,我会遇到 self 问题:

extension TestProtocol {
init(value : Double) {
myVar = value
}

init(existingStruct : TestProtocol) {
myVar = existingStruct.myVar
}
}

两个分配行都发出错误的地方初始化前通过引用传递的变量“self”

有没有办法让这项工作成功——还是我只能使用类?

enter image description here

最佳答案

你的问题和这个post中的几乎一样我昨天回答了。

这是解决这个问题的诀窍:)

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)扩展非常好。

关于ios - init 的 Swift 协议(protocol)扩展自引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30845080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com