为什么我的 Objective-C 块在传递给 Swift 函数时没有显示?
Why is my Objective-C block not showing up when passed to Swift function?
我无法将 objective-c 块传递给 swift 函数。
我将 Audio Unit V3 的 Apple 示例代码中的文件复制到一个新项目,但有些东西坏了。
有一个 Objective-C 函数将匿名块传递给 Swift file/function -- Swift 函数不再工作,因为它没有接收到该块适当地。
当我在 Swift 函数中放置一个断点时,passed-in 块的变量显示为 completionHandler (() -> ())
但没有地址。
它应该显示 completionHandler (()->()) 0xd8d87999
或其他什么。 (它应该将它传递给另一个 Swift 函数,它不再能够调用。)
Swift 代码的其余部分正在运行 AFAIK。
非常感谢任何想法。
Objective-C函数:
(试图将 ^{[self connectParametersToControls];}
传递给 Swift object、"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 优化已开启,这就是导致问题的原因。我认为不应该,但似乎是这样。
我无法将 objective-c 块传递给 swift 函数。
我将 Audio Unit V3 的 Apple 示例代码中的文件复制到一个新项目,但有些东西坏了。
有一个 Objective-C 函数将匿名块传递给 Swift file/function -- Swift 函数不再工作,因为它没有接收到该块适当地。
当我在 Swift 函数中放置一个断点时,passed-in 块的变量显示为 completionHandler (() -> ())
但没有地址。
它应该显示 completionHandler (()->()) 0xd8d87999
或其他什么。 (它应该将它传递给另一个 Swift 函数,它不再能够调用。)
Swift 代码的其余部分正在运行 AFAIK。
非常感谢任何想法。
Objective-C函数:
(试图将 ^{[self connectParametersToControls];}
传递给 Swift object、"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 优化已开启,这就是导致问题的原因。我认为不应该,但似乎是这样。