Edw*_*eer 3 reflection overloading nsobject swift
在我的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)
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
/Users/evermeer/Desktop/dev/GitHub/EVCloudKitDao/AppMessage/AppMessage/CloudKit/EVCloudKitDataObject.swift:106:17:使用Objective-C选择器'hash'的方法'hash()'与来自超类的'hash'的getter冲突'NSObject'具有相同的Objective-C选择器
/Users/evermeer/Desktop/dev/GitHub/EVCloudKitDao/AppMessage/AppMessage/CloudKit/EVCloudKitDataObject.swift:86:17:使用Objective-C选择器'description'的方法'description()'与来自超类的'description'的getter冲突'NSObject'具有相同的Objective-C选择器
有谁知道我怎么能解决这个问题?你不能使用覆盖.
Ant*_*nio 10
正如错误所说,在这两种情况下,属性和方法之间存在命名冲突.最明显的解决方法是将2个方法转换为属性:
public override var hash: Int {
return self.hashValue
}
public override var description: String {
return EVReflection.description(self)
}
Run Code Online (Sandbox Code Playgroud)
也可以写成:
public override var hash:Int {
get {
return self.hashValue
}
}
public override var description : String {
get {
return EVReflection.description(self)
}
}
Run Code Online (Sandbox Code Playgroud)
它在之前版本中工作的原因很可能是因为:
Swift现在可以检测Swift类型系统中的重载和覆盖之间的差异以及通过Objective-C运行时看到的有效行为.
阅读发行说明中的更多内容(搜索18391046和18383574)