Ios 从swift viewcontroller的.c文件调用swift函数
我正在用IOS打电话。该项目正在进行中。我使用PJSIP作为第三方库进行调用,并使用Asterisk作为Voip服务器。我已经设置了服务器,并且在我的项目中集成了PJSIP。我可以注册到服务器,拨打电话,接听电话。当我接到显示用户id和其他信息的呼叫时,我想初始化一个新的ViewController。接收调用方法是用C语言实现的Ios 从swift viewcontroller的.c文件调用swift函数,ios,objective-c,c,swift,pjsip,Ios,Objective C,C,Swift,Pjsip,我正在用IOS打电话。该项目正在进行中。我使用PJSIP作为第三方库进行调用,并使用Asterisk作为Voip服务器。我已经设置了服务器,并且在我的项目中集成了PJSIP。我可以注册到服务器,拨打电话,接听电话。当我接到显示用户id和其他信息的呼叫时,我想初始化一个新的ViewController。接收调用方法是用C语言实现的 /* Callback called by the library upon receiving incoming call */ static void on_in
/* 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函数是通过目标c。为了使事情更简单,我计划使用NSNotification of Objective C发布通知,并在另一个打开的Swift ViewController中接收通知。有可能这样做吗?如果是,这是最佳做法吗?如果我们坚持我的解决方案,我如何在.c文件中调用目标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"
#ifndef应用程序(桥接)标题(h)
#定义应用程序桥接头
#endif/*应用程序桥接头*/
#进口
#导入“XCPjsua.h”
#导入“可达性.h”
#导入“ClearLocalSipManager.h”
#导入“testClass.h”
不能从C文件调用Objective-C(或Swift)
您可以将C文件的扩展名更改为.m,然后自由地混合使用C和Objective-C语法
如果不可能,则可以创建一个新的.m文件,其中包含Objective-C方法和C“shim”函数。垫片函数有一个C接口,但可以包含Objective-C代码,因为它们是在.m文件中定义的
创建一个只定义C shim函数的.h文件,而不是任何Objective-C。然后#将该.h文件包含在.C文件中。正如Duncan回答的那样,是否可以将.C文件的扩展名更改为.m文件。如果其他人试图在swift项目中实现PJSIP,请确保将c文件更改为目标文件。通过桥接文件objective c可以轻松地将数据传递给swift。你可以做任何可能的手术 是的,它实际上可以更改为.m文件。这是否意味着目标c和c有相同的编译器?我从未使用过objective c,我对swift也有一点经验。是的,.m是objective-c的扩展。objective-c是c的“真正超集”,所以所有c代码也是有效的objective-c代码。您好,您有任何例子可以在github中实现吗?