如何调用本机方法并将回调作为参数传递?

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)
}