swift - 需要通过使用需求的特定子类(或符合它的类型)来满足 Swift 协议(protocol)需求

标签 swift protocols swift-protocols

我有一个我创建的协议(protocol)(在 Swift 4.2 中),它的要求之一是一个与协议(protocol)本身类型相同的属性。

例如,我有一个这样定义的协议(protocol):

protocol A {
    var a: A? { get set }
}

我有几个符合这个协议(protocol)的模型:

class Model1: A {
    var a: A?
}
class Model2: A {
    var a: A?
}

对于我的一个模型,我需要通过更具体地定义变量 a 的属性(即具有协议(protocol)类型的变量)来满足协议(protocol)要求。因此,例如我可能希望将 Model2 实现为:

class Model2: A {
    var a: Model1?
}

在这种情况下,由于 Model1 符合协议(protocol) A,您可能希望它能够满足协议(protocol)要求,但是我得到了一个错误:

Type 'Model2' does not conform to protocol 'A'

为什么会发生这种情况,我该怎么做才能让它像上面描述的那样工作?

附录

我在 Xcode Playground 中对上述场景进行了建模,这是我所看到的错误的屏幕截图。 enter image description here

最佳答案

为了符合协议(protocol) A,Model2 需要一个成员 var a 允许存储对符合协议(protocol) A 的任何的引用,而不是只是对 Model1 的引用。所以你不能这样做。

关于swift - 需要通过使用需求的特定子类(或符合它的类型)来满足 Swift 协议(protocol)需求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55231410/

相关文章:

arrays - 将字符串拆分为数组(每个字符)-Swift

Objective-C:这个委托(delegate)在哪里声明,以及其他查询

swift - 在 'stringify()' 上引用实例方法 'Collection' 需要类型 'Int' 和 'Stringify' 是等效的

iphone - 调用可选协议(protocol)方法时崩溃

swift - 如何定义专门化泛型协议(protocol)的协议(protocol),使其可以在类型声明中使用?

ios - 我可以更新协议(protocol)扩展中的指定属性吗?

ios - SwiftUI 自定义 PickerStyle

macos - CNContactPicker - 所有联系人都是灰色的

swift - 来自 Firebase 的图像未显示在 TableView 单元格中 [Swift]

swift - 在 Swift 3 中创建 ValidIndexCollection 协议(protocol)