AudioKit:Objective-C 中的 AKFFTTap“'init' 不可用”

AudioKit: AKFFTTap "'init' is unavailable" in Objective-C

当我尝试在 Objective-C 中创建 AKFFTap 的新实例时,它声称初始化函数不可用

这一行给我错误:“No visible @interface for 'AKFFTTap' declares the selector 'init:'”

AKFFTTap *tap = [[AKFFTTap alloc] init:_player]

这一行给我错误:“'init' 不可用”

AKFFTTap *tap = [[AKFFTTap alloc] init];

如何在 Objective-C 中初始化它?

我使用的是 4.2.2 版

更新:

AKFFTTap *tap = [[AKFFTTap alloc] initWithInput:_player];

给我错误; “'AKFFTTap' 没有可见的@interface 声明了选择器 'initWithInput:'”

我正在我的头文件中导入以下内容

#import <AudioKit/AudioKit.h> 
#import <AudioKit/AudioKit-Swift.h>

想通了

AKFFTTap.swift 中的 init 方法缺少 @objc 标志,因此它不会显示给 Objective-C 代码 public init(_ input: AKNode, fftSize: AKSettings.BufferLength = .veryLong)

这导致 AudioKit-Swift.h 没有可用于 AKFFTTap

的初始化方法
SWIFT_CLASS("_TtC8AudioKit8AKFFTTap")
@interface AKFFTTap : NSObject <EZAudioFFTDelegate>
/// Array of FFT data
@property (nonatomic, copy) NSArray<NSNumber *> * _Nonnull fftData;

- (void)fft:(EZAudioFFT * _Null_unspecified)fft updatedWithFFTData:(float * _Nonnull)fftData bufferSize:(vDSP_Length)bufferSize;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

我可以通过将 @objc 添加到 Swift 方法来解决这个问题,然后将 init 方法添加到 AudioKit-Swift.h。我能够成功初始化水龙头并获得光谱数据

在AKFFTTap.swift中: @objc public init(_ input: AKNode, fftSize: AKSettings.BufferLength = .veryLong)

重建框架后,在AudioKit-Swift.h:

中得到了这段代码
SWIFT_CLASS("_TtC8AudioKit8AKFFTTap")
@interface AKFFTTap : NSObject <EZAudioFFTDelegate>
/// Array of FFT data
@property (nonatomic, copy) NSArray<NSNumber *> * _Nonnull fftData;
/// Initialze the FFT calculation on a given node
/// \param input Node on whose output the FFT will be computed
///
/// \param fftSize The sample size of the FFT buffer
///
- (nonnull instancetype)init:(AKNode * _Nonnull)input fftSize:(enum BufferLength)fftSize OBJC_DESIGNATED_INITIALIZER;
- (void)fft:(EZAudioFFT * _Null_unspecified)fft updatedWithFFTData:(float * _Nonnull)fftData bufferSize:(vDSP_Length)bufferSize;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end