投掷方法不能是@objc协议的成员,因为它返回类型'Bool'的值

时间:2016-03-08 14:34:32

标签: objective-c swift error-handling throw

我收到以下错误:

{library: {discrete: true, hAxis: {format: "MMMM yyyy", ticks: @patient_month_distribution.keys}}}

定义Swift协议时,也需要桥接到Objective-C:

Throwing method cannot be a member of an @objc protocol because it returns a value of type 'Bool'; return 'Void' or a type that bridges to an Objective-C class

还有另一种方法来定义可以返回@objc public protocol Saving { func save() throws -> Bool } 的Swift方法,可能会抛出错误并且Bool兼容吗?

1 个答案:

答案 0 :(得分:4)

如评论中所示,Swift中有以下内容:

func save() throws

将被翻译成:

(BOOL)saveAndReturnError:(NSError **)error

在Objective-C中

。这解释了这个限制。

我知道在save()示例中,返回Bool以及投掷可能没什么意义,但我不同意关于它的评论根本没有意义。可能存在其他有用的用例。 FX。反例;使用标识符加载Bool。如果加载失败,加载Bool可能会返回true / falsethrow,fx。如果在尝试加载时未找到标识符。

但遗憾的是,由于Swift和Objective-C的桥接方式,我们无法做到这一点。