在Objective-C中使用带有可为空的String值的Swift完成块

时间:2018-06-28 19:18:26

标签: objective-c swift

我有一个Swift函数,其签名如下:

func detectLanguage(forString string: String, completion: @escaping (String?) -> Void)

在某些情况下,它返回字符串,在其他情况下,它返回nil。

当我在obj-c文件中自动完成时,这就是我得到的:

[translator detectLanguageForString:@"foo" completion:^(NSString * _Nonnull) {
    // some code
}];

如果我稍微改变一下方块:

[translator detectLanguageForString:@"foo" completion:^(NSString *lang _Nullable) {

Xcode抛出一个非常模糊的错误:

  

预期为')'

如何正确完成此完成区块?谢谢。

1 个答案:

答案 0 :(得分:1)

Objective-C块需要一个参数,该参数位于类型之后 NSString * _Nullable

[translator detectLanguageForString:@"foo" completion:^(NSString * _Nullable lang) {
    // ...
}];