ios - 将 Obj-C 桥接到 Swift 之后缺少什么

标签 ios objective-c swift bridging-header

我以前做过,一般没有问题,设置桥接头等
这一次,我尝试将 Obj-C 框架 (github.com/jensmeder/FSKModem/) 导入到我的 swift 项目中。键入代码时,我可以“看到”所有 Obj-C 方法。
但是,当我编译代码时,出现“使用未声明的标识符‘delete’”或“使用未声明的标识符‘new’”之类的错误。出现错误的 .m 文件中的代码示例:

    _audioFormat = new AudioStreamBasicDescription();


我熟悉 Swift,不知道 Obj-C,但我猜“删除”或“新建”应该存在,对吧?它们属于我应该添加的某个框架吗? 我可以毫不费力地在 Obj-C 中编译原始代码,但我需要将它合并到我用 Swift 编写的项目中。
非常感谢您的帮助

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

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

if (_audioFormat)
{
    delete _audioFormat;
}
}

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

除了 Foundation 之外,我是否应该添加一些我可能缺少的 #include?

最佳答案

newdelete 是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

关于ios - 将 Obj-C 桥接到 Swift 之后缺少什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34613390/

相关文章:

swift - OperationQueue 的“进度”属性在 iOS 13 中不起作用

ios - 当用作函数中的参数时,结构值类型前面需要关键字 var

ios - 如何跨 View 层次定位布局?

ios - "Remind me later"本地通知功能

objective-c - 像 Xcode 4 一样工具栏中的 NSSegmentedControl

ios - Swift:如何从 TableView 中删除重复项?

ios - iOS 中的 Google 当前位置准确性

objective-c - 使用 NSComboBoxes 填充 NSForm

ios - requiredContentSizeIdentifiers 已弃用

ios - Xcode 6 仅显示文本 "Some"作为我的 Swift 类对象的唯一值