如何从 .c 文件向 swift 类 发送通知或委托回调?
How to send notifications or delegate callbacks from .c files to swift classes?
我打算使用 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 class 我可以导入 XCPjsua.h 并且我可以调用 startPjsip()、makeCall()、endCall() 方法。有没有办法从这个 XCPjsua.c 文件向 swift class 发送委托回调或通知。
例如:如果我收到来电,XCPjsua.c 文件将收到来电。从 XCPjsua.c 如果我想通知 swift class "You have received incoming call" 我该怎么做?
由于您可以控制 XCPjsua.[ch]
中的代码,您甚至不必担心编写包装器:您可以根据需要定义回调类型和使用回调的函数,以 "Swifty" 的方式。
这是一个超级简化的示例,其中回调是一个不带任何参数且 returns 不带任何参数的函数。 Swift 回调作为闭包提供给 C 代码。你可以让它更漂亮(和 practical/realistic),如果你 运行 遇到问题,请让这里的人知道。
在 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!")})
我打算使用 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 class 我可以导入 XCPjsua.h 并且我可以调用 startPjsip()、makeCall()、endCall() 方法。有没有办法从这个 XCPjsua.c 文件向 swift class 发送委托回调或通知。
例如:如果我收到来电,XCPjsua.c 文件将收到来电。从 XCPjsua.c 如果我想通知 swift class "You have received incoming call" 我该怎么做?
由于您可以控制 XCPjsua.[ch]
中的代码,您甚至不必担心编写包装器:您可以根据需要定义回调类型和使用回调的函数,以 "Swifty" 的方式。
这是一个超级简化的示例,其中回调是一个不带任何参数且 returns 不带任何参数的函数。 Swift 回调作为闭包提供给 C 代码。你可以让它更漂亮(和 practical/realistic),如果你 运行 遇到问题,请让这里的人知道。
在 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!")})