我有一个符合CustomNSError的类,如下所示:
class ErrorConformingToCustomNSError: NSObject, CustomNSError
{
public static let errorDomain: String = "SomeErrorDomain"
public var errorCode: Int { return self.code }
public var errorUserInfo: [String : Any] { return [:] }
let property: String = "I'm a property of the CustomNSError"
}
它从Swift库中抛出,但我在用Objective-C编写的遗留应用程序中捕获它。从应用程序,出于调试目的,我想打印错误对象的一些属性:
NSError* error = nil;
[SomeClass methodThrowingCustomNSError:&error];
ErrorConformingToCustomNSError* castedError = (ErrorConformingToCustomNSError*)error;
NSLog(@"%@", castedError.property);
执行NSLog时,我得到一个无法识别的选择器错误,而不是获取print语句:
2017-04-18 15:59:54.211051 errortest [47443:314797] ***由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [_ SwiftNativeNSError属性]:无法识别选择器发送到实例0x100b03810'
如果我将NSError
子类化而不是符合CustomNSError
,那么一切似乎都能正常工作。 Here is a gist showing the two scenarios - 您可以粘贴到新的MacOS项目中并查看崩溃。我在Xcode版本8.3上。
我是否遇到过语言错误,或者我只是做错了什么?