objective-c - 使用 Swift 中的 block 调用 Objective-C 方法

标签 objective-c swift objective-c-blocks

我在Objective-C中有一个方法,如下所示:

- (void)myFunction:(void (^)(NSArray *data))successBlock error:(void (^)(NSError *error))errorBlock {
    //...//
    successBlock(someData);
}

我想从 Swift 调用它,但我无法理解语法。

无论我尝试什么,它都会提示:

SomeClass.sharedInstance().myFunction(
    successBlock: {
        (data) in
        print(data)
    },
    error: {
        (error) in
        print(error)
    })

无法调用非函数类型的值

'(((([AnyObject]!) -> Void!, error: ((NSError!) -> Void)!) -> Void)!

最佳答案

这个 Swift 等价物是

SomeClass.sharedInstance().myFunction({ data in
     print(data) 
   }) { error in 
     print(error) 
   }

如果您需要参数名称 successBlockerrorBlock,则必须在 ObjC 端声明它们。

关于objective-c - 使用 Swift 中的 block 调用 Objective-C 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37414249/

相关文章:

ios - iPhone手机来电检测软件

swift - 我如何让 Alamofire 对此网址进行编码 - 它不断丢弃参数

objective-c - 可以访问自身并在整个实例中使用的 block

ios - 递归 block 过早释放

objective-c - Obj-C __block 变量保留行为

objective-c - UIkit 动画和核心动画

objective-c - 更改传递给 OpenAL 的音频数据的字节顺序

ios - 无法在 ViewController 的 AppDelegate 中使用数组

ios - 无法在 iOS 10 上使用 OpenCV 3.1 使用 VideoWriter 创建文件

ios - SwiftUI 中的 PencilKit