如何在swift中传递c函数指针

时间:2015-05-24 08:52:10

标签: objective-c c swift callback

我在swift项目中使用C第三方库,如何在swift中传递回调函数指针? 当我调用第三部分函数“register”时,我收到错误“无法调用.......”

感谢您帮助解决此问题

// file: MyClass.swift
 class MyClass: Object {

   init() {
       typealias callbackPtr = CFunctionPointer<((CInt , UnsafePointer<Void>) -> Void)>
       let selfObject = unsafeBitCast(self, UnsafePointer<Void>.self)

       // call third-part function
       register(callbackPtr, selfObject) //failure point is here
   }

   func greeting() {
       println(“Hello…”)
   }    

}

// file: callBack.h
//
// Third-part Function
// register(void(*functionPtr)(number int, void *context) handler, void *context)
//
// Third-party callback function pointer
// typedef void (*functionPtr)(number int, void *context);

void callbackFunctionPointer(number int, void *context)

// file: callBack.m
void callbackFunctionPointer(number int, void *context) {

    MyClass *myClass =  (__bridge MyClass *)context;
   [myClass greeting];
} 

1 个答案:

答案 0 :(得分:0)

使用register(&callbackPtr, selfObject)传递指针而不是变量。 &获取变量(或指针)的指针。