在Swift中,如何调用Objective-C代码?
苹果提到它们可以共存于一个应用程序中,但这是否意味着人们可以在技术上重用Objective-C中创建的旧类,同时在Swift中构建新类?
在Swift中,如何调用Objective-C代码?
苹果提到它们可以共存于一个应用程序中,但这是否意味着人们可以在技术上重用Objective-C中创建的旧类,同时在Swift中构建新类?
当前回答
给那些试图将Objective-C库添加到Swift的人一个提示:你应该在构建设置中添加- objc ->链接->其他链接器标志。
其他回答
我写了一个简单的Xcode 6项目,展示了如何混合c++, Objective-C和Swift代码:
https://github.com/romitagl/shared/tree/master/C-ObjC-Swift/Performance_Console
特别地,这个例子调用了Swift中的Objective-C和c++函数。
关键是创建一个共享头文件Project-Bridging-Header.h,并将Objective-C头文件放在那里。
请下载该项目作为完整的示例。
我还想补充一点:
我非常感谢@Logan的回答。创建桥文件和设置有很大帮助。
但是在做了所有这些步骤之后,我仍然没有在Swift中获得Objective-C类。
我使用cocoapods库并将其集成到我的项目中。也就是豆荚"pop"。
因此,如果你在Swift中使用Objective-C pod,那么可能有一个机会,你不能获得或导入类到Swift中。
你要做的一件简单的事情是:
转到<YOUR-PROJECT>-Bridging-Header文件和 将语句#import <ObjC_Framework>替换为@import ObjC_Framework
例如:(Pop library)
取代
#import <pop/POP.h>
with
@import pop;
当#import无效时使用clang import。
点击新建文件菜单,并选择文件选择语言目标。这时,它会自动生成一个“Objective-C Bridging Header”文件,用于定义一些类名。
“Swift编译器-代码生成”下的“Objective-C桥接头”。
登录的答案工作良好,除了在最新的Swift 5,它给出了一些编译器错误。以下是针对Swift 5开发人员的修复。
斯威夫特5
import Foundation
class MySwiftObject : NSObject {
var someProperty: AnyObject = "Some Initializer Val" as AnyObject
override init() {}
func someFunction(someArg:AnyObject) -> String {
let returnVal = "You sent me \(someArg)"
return returnVal
}
}
创建桥接头后,进入构建设置=>搜索“Objective-C桥接头”。
就在下面你会发现“Objective-C Generated Interface Header Name”文件。
在视图控制器中导入那个文件。
例子:在我的例子中:“Dauble-Swift.h”