swift - 为什么我的 Objective-C block 在传递给 Swift 函数时没有显示?

标签 swift macos objective-c-blocks core-audio audiounit


我无法将 objective-c block 传递给 swift 函数。


我将 Audio Unit V3 的 Apple 示例代码中的文件复制到一个新项目,但有些东西坏了。

有一个 Objective-C 函数将匿名 block 传递给 Swift 文件/函数——Swift 函数不再工作,因为它没有正确接收 block 。

当我在 Swift 函数中放置断点时,传入 block 的变量显示为 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 header 中的相关行:

- (void)selectAudioUnitWithComponentDescription_objc:(AudioComponentDescription)componentDescription completionHandler:(void (^ _Nonnull)(void))completionHandler;

最佳答案

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

关于swift - 为什么我的 Objective-C block 在传递给 Swift 函数时没有显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55778330/

相关文章:

xcode - 使用多个 UIBezierPaths 绘制性能

swift - Swift 中的字符串格式可选参数

objective-c - NSTextView 未将文本绘制到 NSImage 上

objective-c - AFNetworking - 为什么异步 XML 操作没有触发并且循环无限运行?

objective-c - 在运行时动态修改 block

arrays - 将字符串转换/添加为特定类型

swift - 观察 swift 5 中的屏幕录制

macos - 在 Mac 上更新 PowerShell 帮助

ios - Swift 2.1 词典扩展

ios - 你如何在动画 block 中返回一个值?