对于NSObject,Xcode 6.3中不允许使用hash()和description()

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)