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
当我尝试在 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