【问题标题】:How to send notifications or delegate callbacks from .c files to swift classes?如何从 .c 文件向 swift 类发送通知或委托回调?
【发布时间】:2017-05-30 12:24:37
【问题描述】:

我计划使用 PJSIP 创建 swift SDK。我已经创建了 XCPjsua.h 文件和 XCPjsua.c 文件。我正在使用 XCPjsua.h 头文件与 XCPjsua.c 文件交互,我有以下方法

int startPjsip(char *sipUser, char* sipDomain);


 /**
* Make VoIP call.
* @param destUri the uri of the receiver, something like "sip:192.168.43.106:5080"; 
*/

    2. void makeCall(char* destUri);

    3. void endCall();

从我的 .swift 类中,我可以导入 XCPjsua.h,我可以调用 startPjsip()、makeCall()、endCall() 方法。有没有办法从这个 XCPjsua.c 文件向 swift 类发送委托回调或通知。

例如:如果我收到来电,XCPjsua.c 文件将接收来电。如果我想从 XCPjsua.c 通知 swift 类“您已收到来电”,我该怎么做?

【问题讨论】:

标签: ios c swift pjsip


【解决方案1】:

由于您可以控制XCPjsua.[ch] 中的代码,您甚至不必担心编写包装器:您可以根据需要使用回调定义回调类型和函数,在 "迅捷”的方式。

这是一个超级简化的示例,其中回调是一个不带参数且不返回任何内容的函数。 Swift 回调作为闭包提供给 C 代码。你可以让它变得更花哨(和实用/现实),如果你遇到问题,请让这里的人知道。

XCPjsua.h 中,您可以将其导入桥接头:

// Callback type
typedef void(*call_received_cb_t)();

// A C function that monitors for incoming calls.  It takes a callback
// as a parameter and will call it when a call comes in.
void monitorIncoming(call_received_cb_t cb);

XCPjsua.c 中的一个实现:

void monitorIncoming(call_received_cb_t cb) {
    puts("Monitoring for incoming calls...");
    // Received a call!
    cb();
}

最后,这里是一些 Swift 代码:

monitorIncoming({ print("Processing an incoming call in Swift!")})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多