我有我的目標C文件中的函數(可以說類MyBlockExecutor):如何調用一個接受來自Swift參數塊的字典的Objective-C函數?
+ (void) runBlockFromDictionary: (NSDictionary*) blocksDict andKey: (NSString*) key
{
if ([blocksDict objectForKey: key] != nil)
{
((MyBlock)[blocksDict objectForKey: key])();
}
}
現在,我想打電話從斯威夫特此功能。這是我的快速通話:
MyBlockExecutor.runBlock(from: [
"key1":{()->Void in
print("block for key1 called")
}
], andKey: "key1")
這使我的應用程序崩潰。我在這一行獲得EXC_BAD_ACCESS錯誤:
((MyBlock)[blocksDict objectForKey: key])();
雖然,調用同一個功能從Objective-C的工作完全正常。 此外,我已將MyBlock定義爲:
typedef void (^MyBlock)(); //defined in MyBlockExecutor.h file
如何解決此問題?我打開目標c函數的變化,我只是需要傳遞一個從swift到我的客觀c函數的閉包集合並運行該塊。
這工作!另外,你能告訴我怎麼做這個內聯,即,我不想創建myBlock和字典變量。 – user2473992
@ user2473992:查看更新。 –