重要事项
这是一篇正在开发中的API或技术的初始文档。Apple提供此信息来帮助您对采用本技术做规划,以及根据这里的描述的编程接口来使用Apple品牌的产品。这些信息受变更影响,并且本文档中的软件实现应该以最终的操作系统的测试和最终文档为准。本文档的新版本,可能会通过将来的API和技术的Seed版本提供。
|
本文涉及
Swift被设计成无缝兼容于Cocoa和Objective-C。你可以在Swift里使用Objective-C API(包括从系统框架到你自己的定制代码),以及在Objective-C里使用Swift API。这种兼容性使得的Swift能作为一个简单,方便并且强大的工具集成到你的Cocoa 应用开发工作流程中。
本指南涵盖三个兼容性的重要方面,你可以在开发Cocoa应用时用到的好处:
-
互通性 给了你Swift和Objective-C代码的接口,允许你通过Objective-C使用Swift的类,并且在写Swift代码时,获得相似于Cocoa类,模式和实践的好处。 -
混合和匹配 允许你创建混语言的应用,同时包括Swift和Objective,它们能够彼此通信。 -
迁移 从已有Objective-C代码到Swift,具有互通性和混合匹配使得迁移变得简单,使得用最新的Swift特性代替你的Objective-C应用的部分成为可能。
在你开始学习这些特性之前, 你需要对如何设置一个Swift环境来访问Cocoa系统框架有基本的了解。
|
配置你的Swift环境
为了开始通过Swift来体验访问 Cocoa 框架,用Xcode的一个模板来创建一个基于 Swift的应用程序。
在Xcode中创建一个Swift 项目
-
选择 File > New > Project > (iOS or OS X) > Application > your template of choice . -
点击 Language 弹出菜单并选择 Swift.
一个 Swift项目的结构和一个Object-C项目几乎一样,只有一个重要的区别:Swift没有header文件。在实现和接口之间没有显式的声明,所以一个指定类的所有的信息都在一个单独的.swift文件中。
从这时开始, 你可以开始在AppDelegate里体验写Swift代码,或者你可以通过选择 File > New > File > (iOS or OS X) > Other > Swift 创建一个新的 Swift 类文件。
|
理解 Swift 导入过程
在你建立Xcode项目后,你可以在Swift里,导入任意用Object-C来工作的Cocoa平台框架。
任意Objective-C 框架 (或者C类库) 将作为一个module,能直接导入到Swift中。包括所有的Objectve-C系统框架—— 例如 Foundation, UIKit, 和 Sprite Kit,就像系统支持的公共C类库。举个例子,为了导入Foundation,简单地添加import语句到你写的Swift文件的顶部:
import Foundation
这个import使得所有的 Foundation 的API —— 包括NSDate,NSURL,NSMutableData和他们所有的方法,属性和类别——直接在Swift里可用。
|
导入过程是简单的。Objective-C 框架在header文件里声明API。在Swift里,那些header文件被编译成Objective-C module,然后被导入到Swift作为Swift的API。导入决定了使用Objective-C的函数,类,方法和类型声明在Swift中的形式。对于函数和方法, 这样的处理影响它的参数和返回值类型,导入过程可以做到下面的事情:
-
重新映射确定的Objective-C 类型到在Swift中等同类型, 就像 id 到 AnyObject -
重新映射确定的 Objective-C 核心类型到Swift中的替代类型, 就像NSString 到 String -
重新映射确定的 Objective-C 概念到Swift中相匹配的概念,如 pointers 到 optionals
|
在互通性方面, 你将会学到更多关于这些映射和如何在你的Swift代码进行取舍。
导入Swift到Objective-C的模型,类似于用作导入Objective-C 到Swift的模型。 Swift 声明它的 API ——就像从一个框架来的 ——作为Swift modules。与此同时,这些Swift的module生成Objective-C的 header。这些header声明可以映射回Objective-C的API。一些Swift API 不映射回Objective-C是因为他们取舍了在Objective-C中可用的语言特性。 关于使用在Objective-C里使用Swift更多信息,请参看 在同一项目中的Swift 和 Objective-C 。
注意
你不能直接导入 C++ 代码到 Swift。而是,为C++代码创建一个Objective-C 或者 C wrapper。