未检测到超类中声明的 Swift 协议一致性

Posted

技术标签:

【中文标题】未检测到超类中声明的 Swift 协议一致性【英文标题】:Swift protocol conformance declared in a superclass not detected 【发布时间】:2016-08-03 14:46:19 【问题描述】:

我有以下代码:

import RealmSwift
class MyClass:Object


func test()
    let set = Set<MyClass>()

我收到一个编译时错误:类型“MyClass”不符合此行上的协议“Hashable”:

let set = Set<MyClass>()

MyClass 扩展了 Realm 的类 Object,它扩展了 RLMObjectBase,它扩展了 NSObject。 NSObject 符合 Hashable。它在扩展中声明。

为什么 MyClass 不符合 Hashable,因为它的超类之一符合它?

此外,如果我像这样添加 Hashable:

class MyClass:Object, Hashable

然后错误消失了,但是我的另一个同事,他在同一个项目上工作,得到一个编译时错误:

冗余协议一致性

这个错误意味着子类声明符合已经从超类继承的协议。

有人明白这里发生了什么吗?

【问题讨论】:

如果两台电脑的行为不同,可能是 Xcode 缓存问题,尝试清理项目并删除派生数据。 这已在 Swift 编译器中修复。见github.com/realm/realm-cocoa/issues/2519 【参考方案1】:

我将 xCode 从 7.3 更新到 7.3.1 并解决了问题。感谢 jpsim 的评论为我指明了正确的方向。

【讨论】:

以上是关于未检测到超类中声明的 Swift 协议一致性的主要内容,如果未能解决你的问题,请参考以下文章

如何使用超类中声明的方法返回子类的实例? [复制]

iOS-Swift协议中关联类型的使用

从 Objc 超类继承的 Swift 子类中未调用 viewDidLoad

多种协议的 Swift 类一致性(XCode 7、iOS 9、Swift 2.1)

OpenTok/TokBox 的 Swift 协议一致性错误

Swift 协议一致性