桥接 Obj-C 到 Swift 后缺少什么
What is missing after Bridging Obj-C to Swift
我以前做过,一般没有问题,设置桥接header等
这次,我尝试将 Obj-C 框架 (github.com/jensmeder/FSKModem/) 导入到我的 swift 项目中。键入代码时,我可以 "see" 所有 Obj-C 方法。
但是当我编译代码时,我得到类似 "Use of undeclared identifier 'delete'" 或 "Use of undeclared identifier 'new'" 的错误。出现错误的 .m 文件中的代码示例:
_audioFormat = new AudioStreamBasicDescription();
我熟悉Swift,不知道Obj-C,但我想"delete"或"new"应该存在吧?它们属于我应该添加的某个框架吗?
我可以毫不费力地编译 Obj-C 中的原始代码,但我需要将其合并到我用 Swift 编写的项目中。
非常感谢您的帮助
更多信息...
以下函数在 .m 文件中。你知道为什么 "new" 和 "delete" 关键字无法识别吗?当编译为普通 "Obj-C" 项目时,这工作正常。该错误仅出现在 Swift 项目中(当然在桥接 headers 之后):
-(void)dealloc
{
[self disconnect:NULL];
if (_audioFormat)
{
delete _audioFormat;
}
}
-(void) setupAudioFormat
{
_audioFormat = new AudioStreamBasicDescription();
//...
}
除了 Foundation 之外,我是否应该添加一些我可能缺少的 #include?
在Swift中,您只需在创建对象时调用对象初始化器即可。
_audioFormat = AudioStreamBasicDescription()
new
关键字是 alloc
和 init
的 Objective-C 组合。
new
和 delete
是来自 C++ 的关键字,而不是来自 Swift 或 Objective-C.
Swift
let audioFormat = AudioStreamBasicDescription()
Objective-C
AudioStreamBasicDescription* audioFormat = [[AudioStreamBasicDescription alloc] init];
new
和 delete
是 C++ 关键字;您可以在 C++ 文件(通常是 .cpp
或 .cc
)和 Objective-C++ 文件(总是 .mm
)中使用它们。您不能在 Swift (.swift
) 或 Objective-C (.m
) 文件中使用它们。
使用来自 Swift 的 Objective-C++ 文件的 Objective-C class 是完全有效的;您可以使用 Objective-C 包装 C++ classes 以供 Swift 使用。但是,从普通 Objective-C.
使用 C++ 是无效的
很可能您只需要将 Objective-C 文件重命名为 .mm
。
我以前做过,一般没有问题,设置桥接header等
这次,我尝试将 Obj-C 框架 (github.com/jensmeder/FSKModem/) 导入到我的 swift 项目中。键入代码时,我可以 "see" 所有 Obj-C 方法。
但是当我编译代码时,我得到类似 "Use of undeclared identifier 'delete'" 或 "Use of undeclared identifier 'new'" 的错误。出现错误的 .m 文件中的代码示例:
_audioFormat = new AudioStreamBasicDescription();
我熟悉Swift,不知道Obj-C,但我想"delete"或"new"应该存在吧?它们属于我应该添加的某个框架吗?
我可以毫不费力地编译 Obj-C 中的原始代码,但我需要将其合并到我用 Swift 编写的项目中。
非常感谢您的帮助
更多信息... 以下函数在 .m 文件中。你知道为什么 "new" 和 "delete" 关键字无法识别吗?当编译为普通 "Obj-C" 项目时,这工作正常。该错误仅出现在 Swift 项目中(当然在桥接 headers 之后):
-(void)dealloc
{
[self disconnect:NULL];
if (_audioFormat)
{
delete _audioFormat;
}
}
-(void) setupAudioFormat
{
_audioFormat = new AudioStreamBasicDescription();
//...
}
除了 Foundation 之外,我是否应该添加一些我可能缺少的 #include?
在Swift中,您只需在创建对象时调用对象初始化器即可。
_audioFormat = AudioStreamBasicDescription()
new
关键字是 alloc
和 init
的 Objective-C 组合。
new
和 delete
是来自 C++ 的关键字,而不是来自 Swift 或 Objective-C.
Swift
let audioFormat = AudioStreamBasicDescription()
Objective-C
AudioStreamBasicDescription* audioFormat = [[AudioStreamBasicDescription alloc] init];
new
和 delete
是 C++ 关键字;您可以在 C++ 文件(通常是 .cpp
或 .cc
)和 Objective-C++ 文件(总是 .mm
)中使用它们。您不能在 Swift (.swift
) 或 Objective-C (.m
) 文件中使用它们。
使用来自 Swift 的 Objective-C++ 文件的 Objective-C class 是完全有效的;您可以使用 Objective-C 包装 C++ classes 以供 Swift 使用。但是,从普通 Objective-C.
使用 C++ 是无效的很可能您只需要将 Objective-C 文件重命名为 .mm
。