配色: 字号:
在一个项目中同时使用Swift和Objective-C代码混合编程的方法
2016-12-03 | 阅:  转:  |  分享 
  
在一个项目中同时使用Swift和Objective-C代码混合编程的方法

这篇文章主要介绍了在一个项目中同时使用Swift和Objective-C代码的方法,在一个工程中同时使用Swift和Objective-C混合语言编程的方法,需要的朋友可以参考下

Swift与Objective-C的兼容能力使你可以在同一个工程中同时使用两种语言。你可以用这种叫做mixandmatch的特性来开发基于混合语言的应用,可以用Swfit的最新特性实现应用的一部分功能,并无缝地并入已有的Objective-C的代码中。

MixandMatch概述

Objective-C和Swift文件可以在一个工程中并存,不管这个工程原本是基于Objective-C还是Swift。你可以直接往现有工程中简单地添加另一种语言的源文件。这种自然的工作流使得创建混合语言的应用或框架target,与用单独一种语言时一样简单。

混合语言的工作流程只有一点点区别,这取决于你是在写应用还是写框架。下面描述了普通的用两种语言在一个target中导入模型的情况,后续章节会有更多细节。



在同个应用的target中导入

如果你在写混合语言的应用,可能需要用Swift代码访问Objective-C代码,或者反之。下面的流程描述了在非框架target中的应用。

将Objective-C导入Swift

在一个应用的target中导入一些Objective-C文件供Swift代码使用时,你需要依赖与Objective-C的桥接头文件(bridgingheader)来暴露给Swift。当你添加Swift文件到现有的Objective-C应用(或反之)时,Xcode会自动创建这些头文件。

如果你同意,Xcode会在源文件创建的同时生成头文件,并用product的模块名加上-Bridging-Header.h命名。关于product的模块名,详见NamingYourProductModule。



你应该编辑这个头文件来对Swift暴露出Objective-C代码。

在同一target中将Objective-C代码导入到Swift中

1)在Objective-C桥接头文件中,import任何你想暴露给Swift的头文件,例如:

复制代码代码如下:

//OBJECTIVE-C

#import"XYZCustomCell.h"#import"XYZCustomView.h"#import"XYZCustomViewController.h"

2)确保在BuildSettings中Objective-C桥接头文件的buildsetting是基于Swfit编译器,即CodeGeneration含有头文件的路径。这个路径必须是头文件自身的路径,而不是它所在的目录。

这个路径应该是你工程的相对路径,类似Info.plist在BuildSettings中指定的路径。在大多数情况下,你不需要修改这个设置。

在这个桥接头文件中列出的所有public的Objective-C头文件都会对Swift可见。之后当前target的所有Swift文件都可以使用这些头文件中的方法,不需要任何import语句。用Swift语法使用这些Objective-C代码,就像使用系统自带的Swift类一样。

复制代码代码如下:

//SWIFT

letmyCell=XYZCustomCell()myCell.subtitle="Acustomcell"

将Swift导入Objective-C

向Objective-C中导入Swift代码时,你依赖Xcode生成的头文件来向Objective-C暴露Swift代码。这是自动生成Objective-C头文件,它包含了你的target中所有Swift代码中定义的接口。可以把这个Objective-C头文件看作Swift代码的umbrellaheader。它以product模块名加-Swift.h来命名。关于product的模块名,详见NamingYourProductModule。

你不需要做任何事情来生成这个头文件,只需要将它导入到你的Objective-C代码来使用它。注意这个头文件中的Swift接口包含了它所使用到的所有Objective-C类型。如果你在Swift代码中使用你自己的Objective-C类型,确保先将对应的Objective-C头文件导入到你的Swift代码中,然后才将Swift自动生成的头文件导入到Objective-C.m源文件中来访问Swift代码。

在同一target中将Swift代码导入到Objective-C中

在相同target的Objective-C.m源文件中,用下面的语法来导入Swift代码:

复制代码代码如下:

//OBJECTIVE-C#import"ProductModuleName-Swift.h"

target中任何Swift文件将会对Objective-C.m源文件可见,包括这个import语句。关于在Objective-C代码中使用Swift代码,详见UsingSwiftfromObjectivewww.visa158.com-C。

导入到Swift 导入到Swift Swift代码 不需要import语句 #import Objective-C代码 不需要import语句;需要Objective-C`umbrella头文件 #import"Header.h" 导入到Swift 导入到Swift Swift代码 不需要import语句 #import Objective-C代码 不需要import语句;需要Objective-C`umbrella头文件 #import"Header.h"























献花(0)
+1
(本文系白狐一梦首藏)