从Swift NSObject子类遵循Objective-C协议的问题

这段代码在Swift 1.1中绝对正常

// Obj-C @import Foundation; @protocol HashableObject <NSObject> - (NSUInteger)hash; @end // Swift import Foundation @objc class Object: NSObject, HashableObject { func hash() -> UInt { return 0 } } 

然而,在最新的Swift 1.2和Xcode 6.3beta2中,编译器抱怨Method'hash Method 'hash()' overrides Objective-C method 'hash' from superclass 'NSObject'

这是一个错误,或者其他的东西已经根本改变了,代码是错的? 有没有任何解决办法呢? 在我的代码中有很多东西需要符合Objective-C库中的某些协议,并且除了等待下一个Swift版本之外,基本上没有任何明显的解决scheme。

NSObject已经具有hash属性 :

 protocol NSObjectProtocol { var hash: Int { get } 

而且,Swift 1.2检测到这些错误的覆盖。 从发行说明:

Swift现在检测到Swifttypes系统中的重载和重写之间的差异以及通过Objective-C运行时看到的有效行为。 (18391046,18383574)

例如,现在诊断出类中的“属性”的Objective-C setter与其扩展中的“setProperty”方法之间存在以下冲突:

 class A : NSObject { var property: String = "Hello" // note: Objective-C method 'setProperty:' // previously declared by setter for // 'property' here } extension A { func setProperty(str: String) { } // error: method 'setProperty' // redeclares Objective-C method //'setProperty:' } 

在Swift 1.2(Xcode 6.3 beta 2)中,你可以覆盖NSObjecthash属性作为一个计算属性:

 class Object: NSObject { override var hash: Int { return 0 } }