【发布时间】:2018-02-23 18:35:18
【问题描述】:
我的目标 c 文件中有一个函数(比如说 MyBlockExecutor 类):
+ (void) runBlockFromDictionary: (NSDictionary*) blocksDict andKey: (NSString*) key
{
if ( [blocksDict objectForKey: key] != nil )
{
((MyBlock)[blocksDict objectForKey: key])();
}
}
现在,我想从 Swift 中调用这个函数。这是我的快速通话:
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 函数并运行该块。
【问题讨论】:
标签: objective-c swift closures objective-c-blocks