【发布时间】:2016-02-23 21:24:18
【问题描述】:
我正在尝试将 Swift 函数(具有多个参数,定义为闭包)传递给 Objective-C 函数。从技术上讲,该函数是在 Objective-C++ 中定义的,但是我在标题级别遇到了一个问题,因此对于这个问题应该是等效的。
在 Objective-C 标头中,我将其定义为:
@interface MyObjCClass : NSObject
typedef void (^MyCallback)(NSMutableData*, int);
- (void) functionThatTakesACallback: (MyCallback) callback;
在swift中,我正在尝试以这种方式使用它:
self.objcclass!.functionThatTakesACallback()
{
(values: NSMutableData, length: Int32) -> Void in
// Do something with this data.
}
我得到的错误是:
无法将
'(NSMutableData, Int32) -> Void'类型的值转换为预期的参数类型'MyCallback!'
如果我稍微展开一下,通过将块直接放入 Objective-C 函数定义(无 typedef):
- (void) functionThatTakesACallback: (void (^)(NSMutableData*, int)) callback;
它给了我更多的帮助:
无法将
'(NSMutableData, Int32) -> Void'类型的值转换为预期的参数类型'((NSMutableData!, Int32) -> Void)!'
那么,本质上,有没有办法解开这个闭包以适应预期的类型?还是重新定义Objective-C类型?
【问题讨论】:
标签: objective-c swift objective-c-blocks