我在一个需要使用@objc标记协议的Swift项目中使用台风。我试图将我的项目升级到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类无法使用错误处理符合Objective-C协议"
所以,我尝试了以下内容:
@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的协议并在方法上抛出错误的正确方式是什么?
@objc
协议的信息。我认为throws
对于@objc
协议没有意义... - nhgrif