2017-01-23 135 views
2

我需要調用C++方法,並將回調方法作爲參數傳遞給ObjectiveC方法... 然後在ObjectiveC中多次觸發此回調方法。 ..因爲它是一個回調...等等,然後我需要陷阱的ObjectiveC回調方法追溯到它會被稱爲從銀行代碼封閉...調用C++方法回調ObjectiveC

這是C++方法簽名

static bool cPlusPlusMethodWithCallBack(const std::string& someText, void (*someCallback)(unsigned int) = NULL, unsigned int someNum = 0); 

我的問題是這個回調方法的Block語法應該聲明爲i ñ的ObjectiveC(在.mm和.h),然後可以作爲參數傳遞給++中someCallback用C

我是斯威夫特開發人員,所以卡位上的ObjectiveC傳遞......非常感謝

回答

2

你不能傳遞一個Objective-C塊(或Swift閉包)作爲一個函數指針參數。您需要創建一個單獨的獨立函數,並將其作爲回調傳入。

void MyCallback(unsigned int value) 
{ 
    // ...do something... 
} 

而在你的主代碼:

cPlusPlusMethodWithCallBack("something", MyCallback); 

現在,這樣做的缺點是,在你的回調,你會經常需要以正確處理引用特定的Objective-C對象回調。如果這是您使用此特定回調所需的內容,則需要將其作爲靜態變量保存在某處,以便可以從MyCallback函數訪問它。

或者,如果有在cPlusPlusMethodWithCallBack源代碼控制,可以更新它採取void *「參考」參數,然後提供該參數作爲參數時調用回調:

static void cPlusPlusMethodWithCallback(void (*callback)(void *ref), void *ref) 
{ 
    // ...really time consuming processing... 
    callback(ref); 
} 

然後,更新您的回調函數:

void MyCallback(void *ref) 
{ 
    ObjectiveCObject *obj = (ObjectiveCObject *)ref; 
    [obj doSomething]; 
} 

當你最初調用該方法,只是通過在你需要爲參考參數的對象:

cPlusPlusMethodWithCallback(MyCallback, myObjectiveCObject);