我有一个用Objective-C写的方法,它返回一个BOOL
,例如:
(BOOL)methodName:(NSDictionary<NSString *, NSString *> *)params callback:(void(^)(NSString *_Nullable, ErrorInformation *_Nullable))callback error:(NSError *_Nullable *_Nullable)errorPtr;
在Swift中的用法
我得到错误,Cannot convert value of type '()' to expected condition type 'Bool'
。我认为ret
是()
型,而不是BOOL
型。看一下实现,这个值在dispatch_sync
中发生了变化。
let ret = try! methodName()
// I've tried a bunch of different syntaxes below:
if (ret) { <--- Xcode warning: Cannot convert value of type '()' to expected condition type 'Bool'
}
看到这个方法有3种指示失败的方式是不太好的,但我没有设计它😅坦率地说,我的objective-C并不好:
errorPtr
,在Swift中自动转换为do/try/catch
ErrorInformation
传入回调BOOL
返回值,我正在努力。
返回的BOOL
是NSError
处理的一部分,在Swift中被转换为throws
函数(如果该方法返回一个值,Swift会将其从nullable
转换为nonnull
)。
方法成功(无错误)返回YES
,失败返回NO
。
在斯威夫特:
do {
try methodName()
// method succeeded
} catch {
// method failed
}
回调中的ErrorInformation
可能与异步错误有关,可能类似Swift中的Result<String, Error>
。
引用:
- 处理方法返回的错误对象(Obj-C) 改进的NSError桥接(Swift Evolution 0112)