【发布时间】:2016-09-05 15:05:30
【问题描述】:
假设我们有一个带有初始化器的 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() {...}语句 - ...否则我将无法在现有
Objective-C代码中使用它:
以上都不能满足我的需要/要求。
是否有其他方法可以在不丢失错误信息的情况下删除该警告?
【问题讨论】:
-
你能使用一个包含 NSError 对象的闭包来捕获错误信息吗?抱歉,我对 Swift 了解不多。
-
没有您的答案,但您解决过这个问题吗?遇到同样的问题。
标签: objective-c swift error-handling initialization bridge