我已經讀了上Objective-C的塊(例如在Apple documentation,a blog post,並one或two或three堆棧溢出的答案)。我想將C/C++樣式的回調傳遞給Objective-C方法。「鑄造」 C回調Objective-C的塊
這裏是我的C/C++方報關
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*CALCULATION_CALLBACK)(int x);
void setCubeCallback(int x, CALCULATION_CALLBACK callback);
#ifdef __cplusplus
}
#endif
,並在Objective-C
@interface IOSPluginTest : NSObject
typedef void (^CalculationHandler)(int x);
-(void)cubeThisNumber:(int)number andCallbackOn:(CalculationHandler)callback;
@end
這是Objective-C的實施
#import "IOSPluginTest.h"
@implementation IOSPluginTest
-(void)cubeThisNumber:(int)number andCallbackOn:(CalculationHandler)callback {
int result = number * number * number;
if (callback != nil) {
callback(result);
}
}
@end
出問題在最後一位中,C/C++實現
void setCubeCallback(int x, CALCULATION_CALLBACK callback) {
[[[IOSPluginTest alloc] init] cubeThisNumber:x andCallbackOn:callback];
}
其失敗,錯誤
發送 'CALCULATION_CALLBACK'(又名 '空隙(*)(INT)'),以不兼容的類型的參數來編譯 'CalculationHandler'(又名「空隙(^) (int)')
這兩種類型的描述void(*)(int)
和void(^)(int)
,看起來和我很相似;我錯過了什麼?
可能重複http://stackoverflow.com/questions/13913627/converting-a-function-pointer-to-a - 嵌段 - 在-目標c – Sulthan