我在需要协议标记为@objc的Swift项目中使用Typhoon。我试图将我的项目升级到Swift 2.Swift 2 - @objc引发错误的协议
在我的iOS应用程序中,我的服务层将错误返回到UI。然而,尽管我尽了最大努力,我得到一个编译错误:
Type 'ErrorThrower' does not conform to protocol 'Throwable'
@objc protocol Throwable {
func doSomething(someParam:AnyObject) throws
}
@objc class ErrorThrower : NSObject, Throwable {
func doSomething(someParam: AnyObject) throws {
NSLog("An error is about to be thrown")
throw GenericError.Generic
}
}
enum GenericError : ErrorType {
case Generic
}
我看到这个帖子 “Swift class does not conform to Objective-C protocol with error handling”
所以,这让我尝试这样:
@objc protocol Throwable {
func doSomething(someParam:AnyObject) throws
}
class ErrorThrower : NSObject, Throwable {
@objc(doSomethingAndReturnError:someParam:)
func doSomething(someParam: AnyObject) throws {
NSLog("An error is about to be thrown")
throw GenericError.Generic
}
}
它不会抱怨实现上的@objc(...),但它仍然会给出相同的不一致协议错误。
我也试过这个没有运气...
@objc protocol Throwable {
func doSomethingAndReturnError(error:NSErrorPointer, someParam:AnyObject) -> Bool
}
是什么在斯威夫特2有道宣布与@objc的协议,并扔在方法是错误的?
关于为什么Typhoon需要'@ objc'协议的更多信息可能与此处有关。我认为'@ objc'协议'不合理'... – nhgrif
[协议中的台风和@objc限制](http://stackoverflow.com/questions/31661815/typhoon-and-objc-limitation- in-protocols)这里的答案解释了为什么Typhoon需要它(来自其中一个贡献者)。似乎如果我可以用友好的Objective-C方式格式化方法签名,那么我提到的链接应该可以工作。但我还没有找到正确的格式。 – Barger27