在Swift中,如何调用Objective-C代码?
苹果提到它们可以共存于一个应用程序中,但这是否意味着人们可以在技术上重用Objective-C中创建的旧类,同时在Swift中构建新类?
在Swift中,如何调用Objective-C代码?
苹果提到它们可以共存于一个应用程序中,但这是否意味着人们可以在技术上重用Objective-C中创建的旧类,同时在Swift中构建新类?
当前回答
使任何Swift类的NSObject子类也有意义,我更喜欢使用任何Swift类在Objective-C类中看到,如:
@objc(MySwiftClass)
@objcMembers class MySwiftClass {...}
其他回答
创建桥接头后,进入构建设置=>搜索“Objective-C桥接头”。
就在下面你会发现“Objective-C Generated Interface Header Name”文件。
在视图控制器中导入那个文件。
例子:在我的例子中:“Dauble-Swift.h”
我还想补充一点:
我非常感谢@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。
Create a .h file from NewFile -> Source -> header file Then save the name of file Your_Target_Name-Bridging-Header.h People here gets common mistake by taking their project name but it should be the Project's Target's name if in case both are different, generally they are same. Then in build settings search for Objective-C Bridging Header flag and put the address of your newly created bridging file, you can do it right click on the file -> show in finder -> drag the file in the text area then the address will be populated. Using #import Your_Objective-C_file.h In the swift file you can access the ObjC file but in swift language only.
在Xcode 10.1中的Swift 4.2.1项目中,您可以轻松地添加Objective-C文件。按照以下步骤将Objective-C文件连接到Swift项目。
Step_01:使用Swift语言创建新的Xcode项目:
文件>新建>项目> objc。
在Swift项目中添加新的Objective-C文件:
File >新建>文件…> macOS > Objective-C文件。
Step_03:如果你第一次添加一个新的Objective-C文件到Swift项目中,Xcode会问你:
你想配置一个Objective-C桥接头吗?
Step_04:选择选项:
创建桥接头。
Step_05:将生成一个对应的文件,文件的名称如下:
Objc-Bridging-Header.h。
Step_06:现在,你需要在桥标头中设置桥文件路径。在项目导航器中单击名称为objc的项目,然后选择:
> Objective-C桥接头> objc桥接头。h
将Objc-Bridging-Header.h拖放到该框中生成文件路径。
打开你的Objc-Bridging-Header.h文件,并导入你想要在Swift文件中使用的Objective-C文件。
#import "SpecialObjcFile.m"
下面是SpecialObjcFile.m的内容:
#import <Foundation/Foundation.h>
@interface Person: NSObject {
@public
bool busy;
}
@property
bool busy;
@end
现在在你的Swift文件中,你可以使用一个Objective-C类:
override func viewDidLoad() {
super.viewDidLoad()
let myObjcContent = Person()
print(myObjcContent.busy)
}
使用objective-c的双向方法
1
在Xcode Project中创建bridge-header.h文件 在bridge-Header文件中导入.h文件 在Build设置中设置bridge-Header的路径。 清理项目
2
在项目中创建objective-c文件(它会自动在Build Settings中为您设置路径) 在bridge-Header文件中导入.h文件
现在可以开始了 谢谢