在Swift中,一个Objective-C BOOL被推断为'()'而不是BOOL



我有一个用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返回值,我正在努力。

返回的BOOLNSError处理的一部分,在Swift中被转换为throws函数(如果该方法返回一个值,Swift会将其从nullable转换为nonnull)。

方法成功(无错误)返回YES,失败返回NO

在斯威夫特:

do {
try methodName()
// method succeeded
} catch {
// method failed
}

回调中的ErrorInformation可能与异步错误有关,可能类似Swift中的Result<String, Error>

引用:

  1. 处理方法返回的错误对象(Obj-C)
  2. 改进的NSError桥接(Swift Evolution 0112)

相关内容

  • 没有找到相关文章

最新更新