在特殊情况下,我无法找到有关如何将在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
请帮助!