Objective和Swift混编 官方解释
Apple Official Documentation Explanation
重点
- 1.在Objective-C代码里使用Swift,则在Objective-C代码里使用
#import "ProductModuleName-Swift.h"
即可 - 2.在Swift代码里使用Objective-C,则在Objective-C的桥接文件
ProductModuleName-bridgeing-header.h
里,导入你要在Swift里使用的OC类
1、简介
Swift兼容Objective-C,所以允许开发者在创建的项目里,同时包含两种语言编写的文件。这个特性被Apple称为:Mix and Match(混合搭配)。也就是说在一个已存在的Objective-C的项目中,可以使用最新的Swift语言的各种特性,无缝的包含到OC项目中。
2、Mix and Match (混合搭配)
无论你的项目一开始是Objective-C还是Swift,那Objective-C和Swift都是可以同时存在一个项目中,所以你可以直接的在一个已存在的项目中添加文件。创建一个混合语言的app的流程和你创建一个Swift或者Objective-C语言的app的流程一样的直接、简单。
在mixed-language target里的使用过程有细微差别,这取决于是否是编写一个app或者framework。通常来讲,就是在同一个项目里直接import model,那这个过程如下图描述。
3.Swift代码和Objective-C代码互相使用并导入
首先,他们要在同一个target里;然后,如果需要在Swift代码里使用Objective-C,则非常依赖一个Objective-C的桥接文件,这个桥接文件里就是写一些#import 'samplecode.h'
文件,这些文件里的类就可以在Swift中直接使用了。
当你在一个OC项目里创建一个Swift文件时,则Xcode会提示创建一个桥接文件,文件名为:
项目名称-Bridging-Header.h
文件。在Swift里使用OC文件,不需要在Swift文件里导入任何头文件,但是在项目名称-Bridging-Header.h
文件里需要#import samplecode.h
,表示该文件已经都向Swift暴露。当你在一个Swift项目里创建OC文件时,则Xcode会隐式的创建一个
项目名称-Swift.h
文件,则在OC文件里使用Swift文件时,需要在OC文件里导入项目名称-Swift.h
文件,该文件是隐式创建的,因为一个Swift文件会被自动生成OC的.h
文件和.m
文件
4.导入文件到framework外部
从Objective-C导入到 Swift
import FrameworkName
从Swift导入到 Objective-C
@import FrameworkName;
5. 导入文件到framework内部
从Objective-C导入到 Swift,
不需要手动往umbrella.h文件里 import
,生成时会被自动加上要 import header.h
,所以Swift可以直接使用OC的类
ModuleName-umbrella.h
从Swift导入到Objective-C
`
import
一些宏
把Swift类名暴露给Obejective-C,可以是
@objc (BDUserProfileModel)
public class UserProfileModel: NSObject {
}
然后OC可以用 ZHUserProfileModel
把Objective-C暴露给Swift,可以是:
NS_SWIFT_NAME(UserProfileListViewController)
@interface BDUserProfileListViewController : UIViewController
@end
然后Swift用 UserProfileListViewController