【发布时间】:2016-05-13 12:17:08
【问题描述】:
在 Objective-C 中,您可以将NULL 传递给任何NSError** 参数以忽略错误。但是,当我尝试将 NULL 传递给引发错误的 Swift 方法时,它会生成运行时错误。
// Thrower.swift
class Thrower: NSObject {
static func throwError() throws {
throw NSError(domain: "bla", code: 0, userInfo: nil)
}
}
...
// AppDelegate.m
BOOL success = [Thrower throwErrorAndReturnError:NULL];
这会产生EXC_BAD_INSTRUCTION 错误,使用此堆栈:
我对这种行为有点惊讶。我希望这可以工作,或者当您将NULL 传递给这些方法之一时,编译器会生成警告。
以下是生成的 Swift 方法标头的样子:
+ (BOOL)throwErrorAndReturnError:(NSError * __nullable * __null_unspecified)error;
如果这不应该工作,他们为什么不生成NSError * __nullable * __nonnull,以便在您尝试传入可为空的NSError* 时生成编译器警告?
我在这里遗漏了什么,还是这只是预期的行为?
【问题讨论】:
-
抛出错误是有原因的:帮助您解决错误,您不认为这是个好主意吗?处理所有潜在错误是真正的开发人员的工作,对吧?
标签: objective-c swift error-handling