我正在 IOS 中调用应用程序。该项目进展 swift 。我使用 PJSIP 作为第三方库来调用电话,并使用 Asterisk 作为 Voip 服务器。我已经设置了服务器,还在我的项目中集成了 PJSIP。我能够注册到服务器,调用电话,接听电话。当我收到显示用户 ID 和其他信息的调用时,我想初始化一个新的 ViewController。接收调用方法用C实现。
/* Callback called by the library upon receiving incoming call */
static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id,
pjsip_rx_data *rdata)
{
pjsua_call_info ci;
PJ_UNUSED_ARG(acc_id);
PJ_UNUSED_ARG(rdata);
pjsua_call_get_info(call_id, &ci);
PJ_LOG(3,(THIS_FILE, "Incoming call from %.*s!!",
(int)ci.remote_info.slen,
ci.remote_info.ptr));
/* Automatically answer incoming calls with 200/OK */
//pjsua_call_answer(call_id, 200, NULL, NULL);
//This is where i want to initize the viewcontroller and pass some data.
}
我已经阅读了一些问题,为了调用 swift 函数是通过 objective-c 。为了使事情变得更容易,我计划使用 Objective C 的 NSNotification 来发布通知并在另一个打开的 Swift ViewController 中接收它。可以这样做吗?如果是,这是最佳做法吗?如果我们坚持我的解决方案,我如何在 .c 文件中调用 objective-c ?这是我读过的一些解决方案:
这是我的桥接文件
#ifndef App_Bridging_Header_h
#define App_Bridging_Header_h
#endif /* App_Bridging_Header_h */
#import <BWSip/BWSip.h>
#import "XCPjsua.h"
#import "Reachability.h"
#import "ClearLocalSipManager.h"
#import "testClass.h"
最佳答案
您不能从 C 文件调用 Objective-C(或 Swift)。
您可以将 C 文件的扩展名更改为 .m,然后自由混合使用 C 和 Objective-C 语法。
如果这不可能,那么您可以创建一个新的 .m 文件,其中包含 Objective-C 方法和 C“shim”函数。 shim 函数具有 C 接口(interface),但可以包含 Objective-C 代码,因为它们是在 .m 文件中定义的。
创建一个只定义 C shim 函数的 .h 文件,而不是任何 Objective-C。然后在你的 .c 文件中 #include 那个 .h 文件。
关于ios - 从 swift viewcontroller 调用 .c 文件中的 swift 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33964114/