前言
此Session
将重点讲解如何让Swift
与Objective-C
两种不同的语言共同工作.
内容
让Swift文件使用Objective-C文件的API
Swift
完全支持和使用Objective-C
的框架Framework
;
在已有的Objective-C
文件中创建Swift
文件,Xcode
会提示需要创建一个工程名-Bridging -Header.h
格式的桥接头文件,此文件用来声明需要暴露给Swift
文件使用Objective-C API
的头文件,由开发者自己决定需要给Swift
文件引用的Objective-C
文件.若Xcode
未出现此提示,也可以自动创建桥接头文件,然后在项目target
的building setting
中搜索header
后找到Bridging header
选项,手动添加自己的桥接文件相对路径.
Objective-C文件使用Swift文件的API
在Swift
文件里声明的协议Protocol
,如要在Objective-C
文件中调用必须在协议声明前添加@objc
关键字;
Xcode
会自动生成头文件用于将Swift
的API暴露给Objective-C
文件使用,该头文件命名格式固定为"工程名-Swift.h",只需要先导入此头文件就能使用所有Swift
文件的API
.
在Objective-C框架中使用Swift
给框架Target
添加Swift
文件时不会提示创建桥接文件,但能自动获取到当前框架的其他文件所有API
进行调用,这是系统自动进行的编译优化和处理.
Objective-C
中的initWithXX
方法在转化为Swift
方式,将自动移除With
,生成init(XX
格式 (只针对init
方法的转换)
h文件需要引用Swift
文件对象时,使用@class
进行导入;
m文件引用Swift
文件时使用固定格式FrameworkName/AppName-Swift.h
导入自动生成的头文件;
总结
在Objective-C
代码与Swift
代码相互交互的过程,Xcode
已经足够强大能够自动完成具体实现代码的桥接功能,这也让开发者能更好地使用这两种语言,而不会因为两种语言的不同语法和特性而纠结过多的时间.