2015-11-17 61 views
0

我使用靜態庫,C代碼具有靜態回調方法。指向該方法的指針被分配給一個變量。每次圖書館調用這個函數,我都需要用swift來處理這個事件。一個最小的例子是:在C中拋出Swift可以捕獲的事件

static void onEventXYZ(int x, int y, struct z); 

int anFunction(){ 
    libraryFile.attribute = &onEventXYZ; 
} 


//a C callback function 
static void onEventXYZ(int x, int y, struct z){ 
    //function body 
} 

我在這裏的問題是,我不知道如何從SWIFT類中,以這樣的回調反應。值得一提的是,當應用程序可能在後臺時,我也需要對此回調作出反應。

是否有可能引發swift能夠捕捉和處理的事件或信號?

回答

0

假設你有一個函數,指針指向回調函數...

void doSomething(void (*callback)(int, int)); // int parameters just for example 

...它翻譯成斯威夫特如下:

func doSomething(callback: @convention(c) (Int, Int) -> Void) 

這意味着你可以使用任何功能作爲回調,只要它與@convention(c)標準兼容:

doSomething { 
    print($0) 
    print($1) 
} 

// or 

func onSomething(i: Int, j: Int) { 
    print(i) 
    print(j) 
} 

doSomething(onSomething) 

// or 

let onSomething: (Int, Int) -> Void = { i, j in 
    print(i) 
    print(j) 
} 

doSomething(onSomething) 
+0

Okey,它似乎我不夠精確,我會更新這個問題。我得到了一個指向屬性的靜態函數的指針。我需要在庫激發特定事件時激發swiftcode以及c代碼 – Nerethar

相關問題