+-
使用ObjectiveC的回调调用C方法
我需要调用一个C方法并传入一个回调方法作为参数…来自ObjectiveC方法…
然后在ObjectiveC中多次触发这个回调方法…因为它是一个回调…所以我需要捕获该ObjectiveC回调方法,因为它将被称为 Swift代码的闭包…

这是C方法签名

static bool cPlusPlusMethodWithCallBack(const std::string& someText, void (*someCallback)(unsigned int) = NULL, unsigned int someNum = 0);

我的问题是在ObjectiveC中声明的这个回调方法的Block语法(在.mm和.h中),然后可以作为参数传递给C中的someCallback

我是一个Swift开发人员,所以有点卡在ObjectiveC上…非常感谢

最佳答案
您不能将Objective-C块(或Swift闭包)作为函数指针参数传递.您需要创建一个单独的独立函数,并将其作为回调传递.

void MyCallback(unsigned int value)
{
    // ...do something...
}

在您的主要代码中:

cPlusPlusMethodWithCallBack("something", MyCallback);

现在,这样做的缺点是,在回调中,您通常需要引用特定的Objective-C对象才能正确处理回调.如果你需要使用这个特定的回调,你需要将它作为一个静态变量保存在某个地方,以便可以从MyCallback函数访问它.

或者,如果您可以控制cPlusPlusMethodWithCallBack源代码,则可以更新它以获取void *“reference”参数,然后在调用回调时将该参数作为参数提供:

static void cPlusPlusMethodWithCallback(void (*callback)(void *ref), void *ref)
{
    // ...really time consuming processing...
    callback(ref);
}

然后,更新您的回调函数:

void MyCallback(void *ref)
{
    ObjectiveCObject *obj = (ObjectiveCObject *)ref;
    [obj doSomething];
}

当您最初调用该方法时,只需传入您需要的对象作为参考参数:

cPlusPlusMethodWithCallback(MyCallback, myObjectiveCObject);
点击查看更多相关文章

转载注明原文:使用ObjectiveC的回调调用C方法 - 乐贴网