
一、简介
Swift
作为一门新语言已经以高效和简洁俘获众多开发者的心,然而她还处于发展阶段,许多第三方库并不是都有Swift
版,而且许多旧的项目用的都是OC
,所以用OC
和Swift
混编是许多项目正在使用的方法。Target
是Xcode
功能强大的体现,如果我们需要使用同一套代码实现不同配置,例如不同的bundleID
、app
名称、appicon
等,发布到不同平台iPhone
、iPad
,就可以通过新建target
来实现同一套代码不同配置的管理。
二、OC
和Swift
混编
1、OC
工程中混编Swift
语言,新建swift
文件

2、点击Create
按钮,Xcode
会弹窗提示是否创建Objective-C
桥接头文件

点击Create Bridging Header
按钮创建,即在swift文件相同目录创建了Objective-C
桥接头文件

Swift
中调用OC
:将Swift
中需要用到的头文件添加到Objective-C
桥接头文件中
OC
中调用Swift
:将头文件"工程名称-Swift.h"
导入需要调用到的文件中
3、需要在target
中配置的参数


三、添加Target
1、选中target
按Command+D
复制target
或者右击菜单选中Duplicate


2、双击target
重命名

3、修改scheme
名称

选中scheme
,然后在点击一次(不是双击)

进入编辑状态



当我们新建
target
的时候会自动生成一个与target
同名的scheme
,我们可以根据需要修改scheme
的名称,如果只有一个对应scheme
最好改为和target
同名
添加完target
我们会发现,swift
的桥接头文件名称跟着target
的名称变化

原来swift
桥接文件与target
绑定的

这时编译新建的PrivatePodTest
报错

提示不存在PrivatePodDemo-Swift.h
文件
我们可以通过新建一个头文件Swift.h
使用条件编译来包含swift
桥接头文件
新建头文件Swift.h
,注意两个target
都要勾选

在新建的目标PrivatePodTest
添加TEST
预编译标识符,Debug
模式和Release
模式都要加

在Swift.h
文件中添加条件编译代码如下
#ifdef TEST
#import "PrivatePodTest-Swift.h"
#else
#import "PrivatePodDemo-Swift.h"
#endif
OC
需要调用Swift
的文件中换成导入Swift.h
头文件,这时两个target
都编译成功了
四、Podfile
修改
platform :ios,'8.0'
target 'PrivatePodDemo' do
pod 'MJExtension'
pod 'YYKit'
end
target 'PrivatePodTest' do
pod 'MJExtension'
end
网友评论