未检测到超类中声明的 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 协议一致性的主要内容,如果未能解决你的问题,请参考以下文章
从 Objc 超类继承的 Swift 子类中未调用 viewDidLoad
多种协议的 Swift 类一致性(XCode 7、iOS 9、Swift 2.1)