我收到以下错误:
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 是如何桥接的,我们无法做到这一点。