我有我的目标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:查看更新。 –