在一个项目中同时使用Swift和Objective-C代码混合编程的方法综述_第1页
在一个项目中同时使用Swift和Objective-C代码混合编程的方法综述_第2页
在一个项目中同时使用Swift和Objective-C代码混合编程的方法综述_第3页
在一个项目中同时使用Swift和Objective-C代码混合编程的方法综述_第4页
在一个项目中同时使用Swift和Objective-C代码混合编程的方法综述_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在一个项目中同时使用Swift和Objective-C代码混合编程的方法这篇文章主要介绍了在一个项目中同时使用Swift和0bjective-C代码的方法,在一个工程中同 时使用Swift和Objective-C混合语言编程的方法,需要的朋友可以参考下Swift与Objective-C的兼容能力使你可以在同一个工程中同时使用两种语乳你可以用这种叫做mix and match的特性來开发基T混合语M的应用,可以用Swfit的最新特性实现应用的一部分功能,并无缝地并入已有的Objective-C的代码中。Mix and Match 概述Objective-C和Swift文件可以在一个工程中并存,不

2、管这个工程原本是基丁 Objective-C还是Swift =你可以直接往现有工程中简单地添加另一种语吉的源文件。这种自然的工作流使得创建混合语占的应用或框架target.与用单独一种语肓时一样简单。混合语肓的工作流程只有一点点区别,这取决于你是在写应用还是写框架。卜而描述了普通的用两种语存在一个target中导入模型的情况,后续章节会有更多细节。在同个应用的target中导入如果你在写混合语占的应用,可能需耍用Swift代码访问Objective-C代码,或者反之。卜面的流程 描述了在非框架target中的应用。将 Objective C 导入 Swift在一个应用的target中导入一些O

3、bjectiv/C文件供Swift代码使用时,你需要依赖与ObjectiveC 的桥接头文件(bridging header)來暴鰭给Swift。当你添加Swift文件到现有的ObjectiviC应用(或 反之)时,Xcode会口动创建这些头文件。如果你同意,Xcode会在源文件创建的同时生成头文件,并用product的模块名加上-Bridging-Header.h 命名。关于 product 的模块名,详见 Naming Your Product ModuleCancelNoYesWould you like to configure an Objective-C bridging head

4、er?Adding this file to MyApp will create a mixed Swift and Objective-C target. Would you like Xcode to automatically con figure a bridgi ng header to enable classes to be accessed by both Ianguages?你应该编辑这个头文件来对Swift暴陽出Objective代码。在同一 target中将Objective代码导入到Swift中1)在ObjectiviC桥接头文件中,import任何你想暴需给Swift

5、的头文件,例如:复制代码代码如F:/ OBJECTIVE-Cffimport ,XYZCustomCell.hMffimport ,XYZCustomView.hHimport ,XYZCustomViewController.hK2)确保在Build Settings中Objective-C桥接头文件的build setting是基于Swfit编译器,即CodeGeneration含有头文件的路径。这个路径必须是头文件ll身的路径,而不是它所在的口录。这个路径应该是你工程的相对路径,类似Info.plist在Build Settings中指定的路径。在大多数情况 卜,你不需要修改这个设星。在

6、这个桥接头文件中列出的所有public的Objective-C头文件都会对Swift可见。之后当前target 的所有Swift文件都町以使用这些头文件中的方法.不需要任何import语句。用Swift语法使用这 些Objective-C代码,就像使用系统门带的Swift类一样。复制代码代码如卜:/ SWIFTlet myCell = XYZCustomCell()myCell.subtitle = MA custom cell11将 Swift 导入 Objective s向ObjectiveC中导入Swift代码时,你依赖Xcode生成的头文件來向ObjectiveC暴露Swift代码。

7、这是口动生成Objective-C头文件,它包含了你的target中所有Swift代码中定义的接口。可以把这 个ObjectiveC头文件看作Swift代码的umbrella header0它以product模块名加-Swift.h来命名。 关丁 product 的模块名,详见 Naming Your Product Module你不需要做任何事情来生成这个头文件,只需要将它导入到你的Objective-C代码来使用它。注总这 个头文件中的Swift接口包含了它所使用到的所有Objective-C类型。如果你在Swift代码中使用你 口(2的ObjectiveC类型,确保先将对应的Object

8、ive头文件导入到你的Swift代码中,然后才将 Swift fl动生成的头文件导入到ObjectiviC .m源文件中來访问Swift代码。在同一 target中将Swift代码导入到Objective-C中在相同target的Objective-C .m源文件中,用卜面的语法来导入Swift代码:复制代码代码如卜:/ OBJECTIVE-Cimport ,ProductModuleName-Swift.h, target中任何Swift文件将会对Objective .m源文件可见,包括这个import语句。关于在Objective-C 代码中使用 Swift 代码,详见 Using Swi

9、ft from O-Co导入到Swift导入到SwiftSwift代码不需要import语句#importObjective-C 代 码不需要 import 语句:需要 Objective-C umbrella 头 文件#import,Header.hH在同个Framework的target中导入如果你在写一个混合语古的框架,町能会从Swift代码访问Objective-C代码,或者反之。将 Objective C 导入 Swift要将一些Objective文件导入到同个框架target的Swift代码中去,你需要将这些文件导入到Ob jective-C 的 umbrella header 來

10、供框架使用。在同一 framework中将Objective代码导入到Swift中确保将框架 target 的 Build Settings Packaging Defines Module 设置为 Yes。撚后在你的 umbr ella header头文件中导入你想暴銘给Swift访问的ObjectiveC头文件,例如:复制代码代码如F:/ OBJECTIVE-Cimport ffimport import Swift将会看到所有你在umbrella header中公开暴露出來的头文件,框架target中的所有Swift文件都口J以访问你Objective-C文件的内容,不需要任何impor

11、t语句。复制代玛代码如卜:/ SWIFTlet myCell = XYZCustomCell()myCell.subtitle = A custom cell11将 Swift 导入 Objective C要将一些Swift文件导入到同个框架的target的Objective-C代码氏 你不需要导入任何东西到um brella header文件,而是将Xcode为你的Swift代码门动生成的头文件导入到你的Obj m源文件 去,以便在Objective-C代码中访问Swift代码。在同一 framework中将Swift代码导入到ObjectiviC中确保将框架target的Build Set

12、tings Packaging中的Defines Module设置为Yes。用下面的语法将Swift代码导入到同个框架target卜的Objective-C .m源文件去。复制代玛代码如卜:/ OBJECTIVE-Cffimport 这个import语句所包含的Swift文件都口J以被同个框架target卜的Objective-C .m源文件访问。关丁在 Objective-C 代码中使用 Swift 代码,详见 Using Swift from Objective-C。Typealiases defined in Swift Swift 中定义的类型别名Swift-style variadi

13、cs Swift 风格口J变参数Nested types -嵌套类型Curried functions 柯里化后的函数例如带有范型类型作为参数,或者返回元组的方法不能在Objective-C中使用。为了避免循环引用,不要将Swift代码导入到ObjectiveC头文件中。但是你可以在Objective-C头 文件中前向声明(forward declare) 一个Swift类来使用它,然而,注意不能在Objective-C中继承 一个 Swift 类。在Objective-C头文件中引用Swift类这样前向声明Swift类:复制代码代码如下:/ OBJECTIVE-C/ MyObjective-

14、CClass.hclass MySwiftClass;(interface MyObjective-CClass : NSObject(MySwiftClass *)returnSwiftObject;/* . 7endProduct模块命名Xcode为Swift代码生成的头文件的名称,以及Xcode创建的Obj“tiveC桥接头文件名称,都是从 你的product模块名生成的。默认你的product模块名和product名一样。然而.如果你的produc t名有特殊字符(nonalphanumeric,非数字、字母的字符),例如点号,那么它们会被卜划线(_)替 换之后作为你的product模

15、块名。如果product名以数字开头,那么第一个数字会用卜划线替换掉。 你可以给product模块名提供一个门定义的名称,Xcode会用这个名称來命名桥接的和口动生成的头 文件 Pakaging Defines Module 设星为 Yes:如果你使用Objective桥接头文件,确保在Build Settings中Objective-C桥接头文件的build set ting是基于Swfit编译器,即Code Generation含有头文件的路径。这个路径必须是头文件口身的 路径,而不是它所在的口录:Xcode使用你的product模块名,而不是target名来命名Objective-C桥接头文件和为Swift自动 生成的头文件。详见 Naming Your Product Module:为了在Objective-C中可用戶Swift类必须是Objective-C类的子类,或

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论