如何调用本机方法并将回调作为参数传递?
How to call native method and pass callback as a param?
我在我的项目中使用了一个本地库,它有这样的方法
...
typedef void(STDCALL * FuncPtr) (const char * str1, const char * str2);
extern FuncPtr DebugLog;
void register_debug_callback(FuncPtr callback);
...
当我尝试从我的 swift 代码调用它时
func foo() {
register_debug_callback( what should be passed here? )
}
它希望我通过 FuncPtr
,但如何创建它?
正如一位评论者所指出的,您可以定义一个顶级 Swift 函数并将其作为参数传递。该函数采用 const char *
个参数,在 Swift 中连接到 UnsafePointer<CChar>
,所以像这样的东西应该可以工作:
func debugCallback(str1: UnsafePointer<CChar>?, str2: UnsafePointer<CChar>?) {
guard let str1 = str1, let str2 = str2 else { return }
let swiftStr1 = String(cString: str1)
let swiftStr2 = String(cString: str2)
print("str1: \(swiftStr1), str2: \(swiftStr2)")
}
然后像这样传递给函数:
func foo() {
register_debug_callback(debugCallback)
}
我在我的项目中使用了一个本地库,它有这样的方法
...
typedef void(STDCALL * FuncPtr) (const char * str1, const char * str2);
extern FuncPtr DebugLog;
void register_debug_callback(FuncPtr callback);
...
当我尝试从我的 swift 代码调用它时
func foo() {
register_debug_callback( what should be passed here? )
}
它希望我通过 FuncPtr
,但如何创建它?
正如一位评论者所指出的,您可以定义一个顶级 Swift 函数并将其作为参数传递。该函数采用 const char *
个参数,在 Swift 中连接到 UnsafePointer<CChar>
,所以像这样的东西应该可以工作:
func debugCallback(str1: UnsafePointer<CChar>?, str2: UnsafePointer<CChar>?) {
guard let str1 = str1, let str2 = str2 else { return }
let swiftStr1 = String(cString: str1)
let swiftStr2 = String(cString: str2)
print("str1: \(swiftStr1), str2: \(swiftStr2)")
}
然后像这样传递给函数:
func foo() {
register_debug_callback(debugCallback)
}