0 objective-c ios swift swift2
我注意到如果我创建一个返回void并接受NSError指针的objective-c函数,它将不会转换为swift do-catch错误流,我将不得不像以前一样传入对NSError的引用swift的版本.
例如:
- (void)doSomethingWithError:(NSError **)error {
// set the error in here
}
Run Code Online (Sandbox Code Playgroud)
在swift中:
var error: NSError?
anObject.doSomethingWithError(&error)
if error != nil {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
如果我返回一个objective-c对象或bool,它将正确翻译:
- (NSString *)doSomethingWithError:(NSError **)error {
}
Run Code Online (Sandbox Code Playgroud)
在swift中:
do {
let aString = try anObject.doSomething()
} catch {
// stuff
}
Run Code Online (Sandbox Code Playgroud)
通过Cocoa约定,通过检查方法是否设置了错误变量来确定方法失败是不正确的.在使用错误变量之前,必须始终检查方法返回值.从错误处理编程指南:
重要说明:方法的返回值表示成功或失败.虽然Cocoa方法,在可可误差区域间接返回错误的对象是保证返回这样的对象,如果该方法直接返回指示失败
nil或者NO,您应经常检查返回值是nil或NO试图做的任何事情之前NSError对象.
这个约定是Swift的错误处理基础.在内部,它必须检查方法的返回值,以确定它是否必须跳转到catch块.
你返回的第一个-doSomethingWithError:方法void并不遵循Cocoa的约定,因此Swift没有按照你期望的方式处理它也就不足为奇了.
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |