【发布时间】:2017-03-31 06:11:27
【问题描述】:
我想从我的 ObjC 中调用一个 C 函数。我在 C 结构中传递 C 函数引用(在 ObjC 中定义),以便 C 可以调用该函数。我还想将完成块的引用传递给 C,这样当我收到回调时,我可以调用该完成块。但我不知道如何实现。根据我尝试的不同类型转换,我得到不同的错误。
//Abc.m
void myCallback(MyData *data)
{
//I get the control here!
//((__bridge void *)(data->completionBlock))([NSString stringWithCString:data->json]); //how to call the completion block?
}
- (void)myMethod:(NSString)input
completion:(void (^)(NSString * _Nullable response))completionBlock
{
MyData *data = malloc(sizeof(MyData));
data->myCallback = myCallback;
data->completionBlock = (__bridge void *)(completionBlock);//is this correct?
cFunction(data);
}
//Xyz.c
typedef struct
{
char *json;
void (*myCallback)(void *response);
void *completionBlock;
} MyData;
void cFunction(MyData *data)
{
data->json = "some response";
(data->myCallback)(data);
}
【问题讨论】:
标签: ios objective-c c struct completionhandler