Приведение Objective C блоков в Swift - PullRequest
0 голосов
/ 03 июля 2019

В одном конкретном случае я не могу найти правильное решение о том, как привести блок, определенный в 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

Пожалуйста, помогите!

...