在Swift中转换Objective C块

时间:2019-07-03 11:51:08

标签: objective-c swift casting objective-c-blocks

在特殊情况下,我无法找到有关如何将在Objective C中定义的块强制转换为Swift中的闭包的正确解决方案,以便可以在Swift中执行它。对于其他情况,在将另一个块/闭合传递给闭合时,使用@escaping会有所帮助。但不幸的是,在这种情况下不是这样。

目标C中的块类型定义:

typedef void (^ViewModelUpdatedBlock)(GetValueForKeyPathBlock);
typedef id (^GetValueForKeyPathBlock)(NSString * keyPath);

在目标C中声明一个块:

someNSMutableDictionary[kViewModelUpdatedBlockKey] = ^(GetValueForKeyPathBlock getValueBlock) { ... }

当我尝试在Swift中使用这些块之一时,我找不到正确的方法来投射它。我尝试过:

let viewModelUpdatedBlock = someNSMutableDictionary[kViewModelUpdatedBlockKey] as? ViewModelUpdatedBlock // = nil

let viewModelUpdatedBlock = someNSMutableDictionary[kViewModelUpdatedBlockKey] as? (GetValueForKeyPathBlock?)->() // = nil

let viewModelUpdatedBlock = someNSMutableDictionary[kViewModelUpdatedBlockKey] as? (GetValueForKeyPathBlock)->() // = nil

let viewModelUpdatedBlock = someNSMutableDictionary[kViewModelUpdatedBlockKey] as? (@escaping GetValueForKeyPathBlock)->() // = nil

请帮助!

0 个答案:

没有答案