1

我以前做过,通常没有麻烦,设置桥接头等。
这次,我尝试将 Obj-C 框架(github.com/jensmeder/FSKModem/)导入我的 swift 项目。输入代码时,我可以“看到”所有 Obj-C 方法。
但是当我编译代码时,我会收到诸如“使用未声明的标识符‘删除’”或“使用未声明的标识符‘新’”之类的错误。.m 文件中给出错误的代码示例:

    _audioFormat = new AudioStreamBasicDescription();


我熟悉 Swift,不了解 Obj-C,但我猜应该存在“删除”或“新”,对吧?它们是否属于我应该添加的一些框架?我可以毫无问题地在 Obj-C 中编译原始代码,但我需要将它合并到我用 Swift 编写的项目中。
非常感谢您的帮助

更多信息... 以下函数位于 .m 文件中。你知道为什么“new”和“delete”关键字无法识别吗?当编译为普通的“Obj-C”项目时,这可以正常工作。该错误仅出现在 Swift 项目中(当然是在桥接标头之后):

-(void)dealloc
{
[self disconnect:NULL];

if (_audioFormat)
{
    delete _audioFormat;
}
}

-(void) setupAudioFormat
{
_audioFormat = new AudioStreamBasicDescription();
//...
}

除了Foundation,我是否应该添加一些我可能会丢失的#include?

4

3 回答 3

4

new并且delete是 C++ 关键字;您可以在 C++ 文件(通常.cpp.cc)和 Objective-C++ 文件(总是.mm)中使用它们。您不能在 Swift ( .swift) 或 Objective-C ( .m) 文件中使用它们。

从 Swift 的 Objective-C++ 文件中使用 Objective-C 类是完全有效的;您可以使用 Objective-C 包装 C++ 类以供 Swift 使用。但是,从普通的 Objective-C 中使用 C++ 是无效的。

很可能您只需要将 Objective-C 文件重命名为.mm.

于 2016-01-05T14:44:59.913 回答
2

new并且delete是来自 C++ 的关键字,而不是来自 Swift 或 Objective-C 的关键字。

迅速

let audioFormat = AudioStreamBasicDescription()

Objective-C

AudioStreamBasicDescription* audioFormat = [[AudioStreamBasicDescription alloc] init];
于 2016-01-05T14:04:48.520 回答
0

在 Swift 中,您只需要在创建对象时调用对象初始化器。

_audioFormat = AudioStreamBasicDescription()

new关键字是 和 的 Objective- allocC组合init

于 2016-01-05T14:04:01.023 回答