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



我收到以下错误:

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

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

@objc public protocol Saving {
    func save() throws -> Bool
}

有没有其他方法来定义 Swift 方法,该方法可以返回 Bool ,可能会抛出错误并且Objetive-C兼容?

如注释中所述,Swift 中的以下内容:

func save() throws

将翻译成:

(BOOL)saveAndReturnError:(NSError **)error

在Objective-C中。这就解释了这种局限性。

我知道在save()的例子中,返回Bool和投掷可能没有多大意义,但我不同意关于它根本没有意义的评论。可能还有其他有意义的用例。Fx. 反向示例;使用标识器加载Bool。加载Bool可能会返回true/false 如果加载失败,则返回throw fx。如果在尝试加载时找不到标识符。

然而,不幸的是,由于 Swift 和 Objective-C 是如何桥接的,我们无法做到这一点。

相关内容

  • 没有找到相关文章

最新更新