【发布时间】:2015-11-18 15:52:02
【问题描述】:
我在 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 声明协议并在方法上抛出错误的正确方法是什么?
【问题讨论】:
-
更多关于 Typhoon 为什么需要
@objc协议的信息可能与此处相关。我不认为throws对@objc协议有意义... -
Typhoon and @objc limitation in protocols 这里的答案解释了为什么 Typhoon 需要它(来自一位贡献者)。似乎如果我可以以一种客观 c 友好的方式格式化方法签名,我提到的链接应该可以工作。但是我还没有找到合适的格式。
标签: objective-c swift interop swift2 typhoon