Почему мой блок Objective-C не отображается при передаче в функцию Swift? - PullRequest
1 голос
/ 21 апреля 2019

Я не могу передать блок 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;

1 Ответ

0 голосов
/ 22 апреля 2019

Оказывается, хотя оптимизация Obj-c была отключена, оптимизация Swift была включена, и это вызывало проблему. Я не думаю, что это должно, но, похоже, это так.

...