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

时间:2015-04-11 07:57:29

标签: swift reflection overloading nsobject

在我的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选择器

有谁知道我怎么解决这个问题? 你不能使用覆盖。

1 个答案:

答案 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中搜索更多内容(搜索1839104618383574