当前位置:  开发笔记 > 编程语言 > 正文

使用来自ObjectiveC的回调调用C ++方法

如何解决《使用来自ObjectiveC的回调调用C++方法》经验,为你挑选了1个好方法。

我需要调用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中)声明的此回调方法的Block语法应该是什么,然后可以将其作为参数传递给C ++中的someCallback

我是一名Swift开发人员,因此对ObjectiveC有点困惑...非常感谢



1> Chris Vig..:

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

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

在您的主要代码中:

cPlusPlusMethodWithCallBack("something", MyCallback);

现在,它的缺点是在回调中,您通常需要引用特定的Objective-C对象才能正确处理回调。如果您需要使用此特定的回调MyCallback函数,则需要将其保存为静态变量,以便可以从函数中对其进行访问。

另外,如果您可以控制cPlusPlusMethodWithCallBack源代码,则可以对其进行更新以采用void *“引用”参数,然后在调用回调时将该参数作为参数提供:

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);

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有