ios – 使用Swift导入aurioTouch库

ios – 使用Swift导入aurioTouch库,第1张

概述我正在尝试将Objective-C应用程序转换为 swift. 我想将aurioTouch中的类导入Swift应用程序,因此我创建了以下Bridging-Header文件: #import "AudioController.h" 但我在DCRejectionFilter.h,BufferManager.h,FFTHelper.h中收到以下错误: Unknown type name ‘class’; 我正在尝试将Objective-C应用程序转换为 swift.

我想将aurioTouch中的类导入Swift应用程序,因此我创建了以下BrIDging-header文件:

#import "AudioController.h"

但我在DCRejectionFilter.h,BufferManager.h,FFTHelper.h中收到以下错误:

UnkNown type name ‘class’; dID you mean ‘Class’?

Expected ‘;’ after top level declarator

以及AudioController.h:

UnkNown type name ‘BufferManager’

UnkNown type name ‘DCRejectionFilter’

当然我使用.mm而不是.m,但这不起作用.

更新

包含auriotouch库(带Obj-C和C)的简单快速项目如下:
https://github.com/pika-shi/aurioTouch-Sample

解决方法 本答案向您展示了如何解决桥接头#import,并且是如何创建Objective-C包装器对象的分步教程.

.mm并不代表斯威夫特

.mm也不是指Objective-C

它意味着Objective-C,只是将文件重命名为.mm没有任何改进.请注意,您仍然包含相同的.h文件,这些是问题开始的地方.这些.h引用C类,它们必须被包装.

将Objective包含在Objective-C中

AudioController.h文件不是Objective-C文件:它包含BufferManager.h,它是一个C文件,编译就在那里停止.

你需要创建一个真正的包装器,比如AudioControllerBrIDge,其中.h在Objective-C中,而.mm可以反过来引用C:

.H

绝对地,肯定没有C允许,明确,包括或其他.

#import <Foundation/Foundation.h>@interface AudioControllerBrIDge : NSObject    // ...@end

.mm

Objective-C可以容忍您需要的所有C,只要它不在接口中公开.

#import "AudioControllerBrIDge.h"#import "AudioController.h"@implementation AudioControllerBrIDge    // ...@end

当然,您可以直接修改AudioController.h,但我们会考虑这种不好的做法:对于本答案的其余部分,我们假设您正在尝试按原样集成aurioTouch,正好更改了0行代码.

在AudioControllerBrIDge的实现中,您现在可以实例化AudioController,并导入正确编译所需的所有C文件,这是您在.h中无法做到的.请记住,你在BrIDing-header中暴露给Swift的.h必须是一个纯粹的Objective-C接口.

// BrIDging header#import "AudioControllerBrIDge.h"

您很快就会看到需要下载CoreAudio/PublicUtility,因为某些文件(例如CADeBUGPrintf)在示例中只是缺少,并且不知何故不会在您的新项目中构建,至少在DEBUG模式下.

如果你到目前为止,你会发现你会得到十几个已弃用的警告,你现在可以忽略它们,而AudioController.mm中的ARC错误只有一半. Fix with -fno-objc-arc编译器标志:

如果你到目前为止(道具),并添加:

> Accelerate.framework
> AudioToolBox.framework
> AVFoundation.framework

在Build Phases中你的目标并编译,你会发现它构建和链接.

把它包起来

我花了1小时47分钟到达那一点(下面的证明).下一步当然是实际将包装器代码放在AudioControllerBrIDge中,以便它返回(换行):

BufferManager*          _bufferManager;DCRejectionFilter*      _dcRejectionFilter;- (BufferManager*) getBufferManagerInstance;

这是该类中的3个非Objective-C元素.

包装BufferManager和DCRejectionFilter也可能更清晰,因此可以在Swift中自由使用它们.我会把这个决定告诉读者.

演示

只是为了记录,上面的所有说明导致成功编译

let ac = AudioControllerBrIDge()

如截图所示.它显示了所需的所有文件,并在iOS 9上展示了针对iPhone 6的Xcode 7的成功构建.

总结

以上是内存溢出为你收集整理的ios – 使用Swift导入aurioTouch库全部内容,希望文章能够帮你解决ios – 使用Swift导入aurioTouch库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1014161.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存