objective-c - 使用 block 参数从 Objective-C 调用 Swift 方法

标签 objective-c swift

在 Swift 中我有这种类型:

typealias AsyncBlock = (completionHandler: dispatch_block_t) -> Void

然后我将此扩展添加到 NSOperationQueue:

extension NSOperationQueue {
    func addAsyncOperationWithBlock(block: AsyncBlock) {
        addOperation(MyOperation(block: block))
    }
}

我想从 Objective-C 调用它:

[self.queue addAsyncOperationWithBlock:^{
   // code
}];

但我在上面的代码中得到的是这个错误:

Incompatible block pointer types sending 'void (^)(void)' to
parameter of type 'void (^ _Nonnull)(void (^ _Nonnull __strong)(void))'

谁能帮助解决这个问题?

最佳答案

您传递给函数的 block 类型(带 0 个参数)与声明(带 1 个类型为 dispatch_block_t 的参数)不同。

所以你应该这样使用它:

  [self.queue addAsyncOperationWithBlock:^(dispatch_block_t completionHandler) {
      //do something...
  }];

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

相关文章:

objective-c - 如何阻止 QTMovie 卡住我的应用程序的 UI?

iphone - 如何在分段控件中获取所选分段的标题?

ios - 快速接触多个节点 - IOS

swift - Swift 中 [] 和 []() 之间的区别

iOS Cocoalumberjack : ThreadId and ProcessId not printed in File Logger but prints in TTY Console logs

ios - Swift:非托管 AVAudioPlayer

ios - 如何在 tableview 中显示联系人 - Objective C

ios - 将图像转换为 CGBitmapContext

ios - 如何有效地使用 NSMutableDictionaries 作为字典的键?

ios - 如何使用多个航路点swift4绘制路线