Я не могу передать блок target-c в функцию swift.
Я скопировал файлы из примера кода Apple для Audio Unit V3 в новый проект, и что-то сломалось.
Существует функция Objective-C, которая передает анонимный блок в файл / функцию Swift - функция Swift больше не работает, поскольку не получает блок должным образом.
Когда я помещаю точку останова в функцию Swift, переменная для переданного блока отображается как completionHandler (() -> ())
, но без адреса.
Это должно показать completionHandler (()->()) 0xd8d87999
или что-то еще.(И он должен передать это другой функции Swift, которую он больше не может вызывать.)
Остальная часть кода Swift работает AFAIK.
Любые идеи, которые высоко ценятся.
Функция Objective-C:
(пытается передать ^{[self connectParametersToControls];}
объекту Swift, "playEngine")
playEngine = [[SimplePlayEngine alloc] initWithComponentType: desc.componentType componentsFoundCallback: nil];
[playEngine selectAudioUnitWithComponentDescription_objc:desc
completionHandler:^{
[self connectParametersToControls];
}];
Функция Swift:
@objc public func selectAudioUnitWithComponentDescription_objc(_ componentDescription: AudioComponentDescription, completionHandler: @escaping (() -> Void)) {
self.selectAudioUnitWithComponentDescription(componentDescription, completionHandler:completionHandler)
}
Соответствующая строка в заголовке Swift:
- (void)selectAudioUnitWithComponentDescription_objc:(AudioComponentDescription)componentDescription completionHandler:(void (^ _Nonnull)(void))completionHandler;