使用块参数从Objective-C调用Swift方法

时间:2015-10-29 03:23:19

标签: 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))'

任何人都可以帮助解决问题吗?

1 个答案:

答案 0 :(得分:2)

传递给函数的块类型(带0参数)与声明(带有dispatch_block_t类型的1参数)不同。

所以你应该像这样使用它:

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