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

这是 C++ 方法签名

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

我的问题是在 ObjectiveC(在 .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);

关于c++ - 使用 Objective C 的回调调用 C++ 方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41806116/

10-11 22:58
查看更多