在我的Swift库中EVCloudKitDao我做了很多反思。因此,我已将我的数据对象的基类设置为NSObject。现在升级到Xcode 6.3后,我得到了2个函数的错误,用于获取哈希和对象的描述。描述函数很不错,但我确实需要哈希来使我的对象使用Set。
这是我的代码
public class EVCloudKitDataObject : NSObject, NSCoding, Printable, Hashable, Equatable {
public func hash() -> Int {
return self.hashValue
}
public func description() -> String {
return EVReflection.description(self)
}
}
我得到的错误是:
/Users/evermeer/Desktop/dev/GitHub/EVCloudKitDao/AppMessage/AppMessage/CloudKit/EVCloudKitDataObject.swift:106:17: 方法'哈希()'使用Objective-C选择器' hash'与吸气剂发生冲突 为了哈希'来自超类' NSObject'使用相同的Objective-C 选择
/Users/evermeer/Desktop/dev/GitHub/EVCloudKitDao/AppMessage/AppMessage/CloudKit/EVCloudKitDataObject.swift:86:17: 方法'描述()'使用Objective-C选择器'描述' 与吸气剂冲突的描述'来自超类' NSObject' 使用相同的Objective-C选择器
有谁知道我怎么解决这个问题? 你不能使用覆盖。
答案 0 :(得分:10)
正如错误所说,在这两种情况下,属性和方法之间存在命名冲突。最明显的解决方法是将2种方法转换为属性:
public override var hash: Int {
return self.hashValue
}
public override var description: String {
return EVReflection.description(self)
}
也可以写成:
public override var hash:Int {
get {
return self.hashValue
}
}
public override var description : String {
get {
return EVReflection.description(self)
}
}
之所以在之前版本中运行的原因很可能是因为:
Swift现在检测Swift类型系统中的重载和覆盖之间的差异以及通过Objective-C运行时看到的有效行为。
在release notes中搜索更多内容(搜索18391046
和18383574
)