假设我们有一个带有初始化器的 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
继承子类
但是这样我会:
- 有关导致异常的错误的松散信息,
- 必须创建 FooEven 可选实例和/或处理许多:
if let fooEven = FooEven.init() {...}
statements - ...否则我将无法在现有的
Objective-C
代码中使用它:
以上都不满足我的需要/要求。
是否有其他方法可以在不丢失有关错误的信息的情况下删除该警告?
最佳答案
另一种解决方法是添加一个抛出便利构造器来调用非抛出指定构造器。
关于objective-c - 如何将可抛出的 Swift 初始化程序与 Objective-C 代码桥接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37141867/