为什么我的Objective-C块在传递给Swift函数时没有出现?

问题描述 投票:1回答:1

我没有将objective-c块传递给swift函数。


我将用于Audio Unit V3的Apple示例代码中的文件复制到一个新项目中,然后出现了问题。

有一个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;
swift macos objective-c-blocks core-audio audiounit
1个回答
0
投票

事实证明,虽然Obj-c优化已关闭,但Swift优化已经开启,这导致了问题。我不认为它应该,但似乎是这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.