假设我们有一个带有初始化程序的Swift类,该初始化程序可能会引发错误。此类必须在Objective-C
代码库(NSObject
子类)中使用:
import Foundation
enum EvenError : ErrorType {
case NonEvenNumber
}
class FooEven : NSObject {
var evenNumber : UInt
init(evenNumber: UInt) throws {
guard evenNumber % 2 == 0 else {
throw EvenError.NonEvenNumber
}
self.evenNumber = evenNumber
}
}
产生编译警告:
<unknown>:0: warning: no calls to throwing functions occur within 'try' expression
我可以通过两种方法解决此警告:
通过将可抛出的初始化程序(
init... -> throws
)替换为失败的一个(init?
),从而实现NSObject
的子类化但是,通过这种方式,我将:
if let fooEven = FooEven.init() {...}
语句Objective-C
代码中使用它:以上都不满足我的需求/要求。
还有其他方法可以删除该警告而不丢失有关该错误的信息吗?
最佳答案
另一个解决方法是添加一个抛出便捷的初始化程序,该初始化程序调用您的非抛出指定的初始化程序。
关于objective-c - 如何在Objective-C代码中桥接可抛出的Swift初始化程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37141867/