iOS - Swift 与 Objective-C 互相操做

https://www.cnblogs.com/QianChia/p/5777341.html#_label2html

本文目录swift

回到顶部框架

前言

  • 在 Swift 语言中,咱们可使用 Objective-C、C 语言编写代码,咱们能够导入任意用 Objective-C 写的 Cocoa 平台框架、Objective-C 框架或 C 类库。

回到顶部函数

 

一、在 Swift 中使用 Objective-C、C 代码

1.1 在 Swift 项目中使用 Objective-C、C 代码

  • 1> 在 Swift 项目中建立 OC/C 的 .h 和 .m / .c 文件,文件中的格式为其本有的格式。ui

  • 2> Xcode 提示是否建立 Objective-C bridging 头文件,点击 Yes 建立,Xcode 会自动建立一个桥接头文件,文件名的格式是 "项目名-Bridging-Header.h"。spa

    • 通常状况下,Xcode 辅助生成的桥接头文件在编译属性里已经帮咱们设置了引用,若是没有的话须要本身将其配置到项目中,选中项目中的 Targets => Build Setting => Swift Compiler - general => Objective-C Bridging Header 属性,双击配置成 “项目名/项目名-Bridging-Header.h” 便可。.net

      ocswift1

  • 3> 在此桥接头文件中添加所建立的 OC/C 文件的头文件( #import "*****.h" )。调试

  • 4> 在 main.swift 文件中无需添加头文件,直接使用建立的 OC/C 文件中的类、方法或函数便可。code

1.2 在 Swift 项目中的 Objective-C 代码中使用 Swift 代码

  • 1> 在 .Swift 文件中每个方法和类名前都加 @objc 前缀来修饰,以便在 Objective-C 中能够访问。新版 Swift 代码中已不须要再添加。htm

  • 2> 在 Swift 项目中建立 OC 的 .h 和 .m 文件,文件中的格式为其本有的格式。

  • 3> Xcode 提示是否建立 Objective-C bridging 头文件,点击 Yes 建立,Xcode 会自动建立一个桥接头文件,文件名的格式是 "项目名-Bridging-Header.h"。

    • 通常状况下,Xcode 辅助生成的桥接头文件在编译属性里已经帮咱们设置了引用,若是没有的话须要本身将其配置到项目中,选中项目中的 Targets => Build Setting => Swift Compiler - general => Objective-C Bridging Header 属性,双击配置成 “项目名/项目名-Bridging-Header.h” 便可。

      ocswift1

  • 4> 在此桥接头文件中添加所建立的 OC 文件的头文件( #import "*****.h" )。

  • 5> 在 OC 的 .m 文件中添加头文件 “#import "项目名-Swift.h"”,在此文件中直接使用 .Swift 文件中的类、方法便可。

    • "项目名-Swift.h" 这个头文件是 Xcode 自动产生的,若是不是引用外部 Swift 语言编写的框架,不须要咱们作过多配置,可是若是是引用外部框架,须要咱们进行配置:选中项目中的 Targets => Build Setting => Packaging => Defines Module 修改为 Yes,而后在 Build Setting => Packaging => Product Module Name,设置一个名称,例如 SwiftInAction。特别注意的是,这个名称不能有 “-” 等字符。这样咱们在 OC 的 .m 文件中就能够添加 "SwiftInAction-Swift.h" 了,这个名字是 Xcode 根据设置的模块名自动生成的。

      ocswift2

  • 6> 在 main.swift 文件中无需添加头文件,直接使用建立的 OC 文件中的类、方法。

回到顶部

二、在 Objective-C 中使用 Swift 代码

2.1 在 Objective-C 项目中使用 Swift 代码

  • 一、在 OC 项目中建立 .Swift 文件,文件中的格式为其本有的格式。

  • 二、Xcode 提示是否建立 Objective-C bridging 头文件,点击 Yes 建立,Xcode 会自动建立一个桥接头文件,文件名的格式是 "项目名-Bridging-Header.h"。

    • 通常状况下,Xcode 辅助生成的桥接头文件在编译属性里已经帮咱们设置了引用,若是没有的话须要本身将其配置到项目中,选中项目中的 Targets => Build Setting => Swift Compiler - general => Objective-C Bridging Header 属性,双击配置成 “项目名/项目名-Bridging-Header.h” 便可。

      ocswift1

  • 三、在 OC 的 .m 文件中添加头文件 “#import "项目名-Swift.h"”,在此文件中直接使用 .Swift 文件中的类、方法便可。

    • "项目名-Swift.h" 这个头文件是 Xcode 自动产生的,若是不是引用外部 Swift 语言编写的框架,不须要咱们作过多配置,可是若是是引用外部框架,须要咱们进行配置:选中项目中的 Targets => Build Setting => Packaging => Defines Module 修改为 Yes,而后在 Build Setting => Packaging => Product Module Name,设置一个名称,例如 SwiftInAction。特别注意的是,这个名称不能有 “-” 等字符。这样咱们在 OC 的 .m 文件中就能够添加 "SwiftInAction-Swift.h" 了,这个名字是 Xcode 根据设置的模块名自动生成的。

      ocswift2

    • 在开始的几回编译或者代码调试中,可能会出错,提示找不到这个自动生成的文件,通常对项目进行 clean 操做能够解决问题,具体是点击 Product 菜单下的 clean 菜单项便可。

2.2 在 Objective-C 里使用 Swift 限制

  • 一、一些 Swift 特有的类型,例如元组、泛型、类型别名、嵌套类型等,不能在 Objective-C 里使用。

  • 二、不能在 Objective-C 里继承 Swift 类型。

  • 三、数据类型之间须要互相映射关联。能够 Objective-C 核心类型到 Swift 中的替代类型,例如 NSString 到 String。Objective-C 肯定类型到 Swift 中的同等类型,例如 id 到 AnyObject。Objective-C 概念到 Swift 中相匹配的概念,如 pointers 到 optionals。

  • 四、不能直接把 C++ 代码导入 Swift,解决办法是为 C++ 代码建立一个 Objective-C 或者 C 的封装。

相关文章
相关标签/搜索