我在Swift项目中使用Typhoon,该项目要求使用@objc标记协议。我正在尝试将我的项目升级到Swift 2。
在我的iOS应用程序中,我的服务层将错误抛回UI。但是,尽管我付出了最大努力,但我收到了编译错误:
输入' ErrorThrower'不符合协议' 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
}
在Swift 2中使用@objc声明协议并在方法上抛出错误的正确方法是什么?
答案 0 :(得分:2)
不幸的是,根据我今天研究的内容,我认为Swift 2样式异常与Objective-C不兼容,因此不适用于Typhoon。