章節導航:
Swift開發指南:使用Swift與Cocoa和Objective-C(Swift 4) - 1.入門
Swift開發指南:使用Swift與Cocoa和Objective-C(Swift 4) - 2.互通性
基本設置
Swift旨在提供與Cocoa和Objective-C的無縫兼容性。您可以在Swift中使用Objective-C API,您可以在Objective-C中使用Swift API。這使Swift成為一個簡單、方便和強大的工具,可以集成到開發工作流程中。
本指南介紹了Swift和Objective-C兼容性的三個重要方面,您可以在開發Cocoa應用程序時將其利用它:
- 互操作性讓您可以在Swift和Objective-C代碼之間進行交互,允許您在Objective-C中使用Swift類,并在編寫Swift代碼時利用熟悉的Cocoa類、模式和實踐。
- 混編和匹配允許您創建包含可以彼此通信的Swift和Objective-C文件的混合語言應用程序。
- 從現有的Objective-C代碼遷移到Swift可以輕松實現互操作性和混合搭配,從而可以使用最新的Swift功能來替換Objective-C應用的部分。
在開始了解這些功能之前,您需要基本了解如何設置可以訪問Cocoa系統框架的Swift環境。
建立你的Swift環境
要使用Swift開始嘗試使用Cocoa應用程序開發,請從提供的Xcode模板之一創建一個新的Swift項目。
在Xcode中創建Swift項目
- 選擇文件>新建>項目>(iOS,watchOS,tvOS 或 macOS)>應用程序> 您選擇的模板。
-
單擊語言彈出菜單并選擇Swift。
建立Swift項目
Swift項目的結構與Objective-C項目幾乎完全相同,有一個重要的區別:Swift沒有頭文件。在實現和接口之間沒有明確的描述 —— 所有關于類、函數或常量的信息都駐留在單個.swif
t文件中。這在同一項目中的Swift與Objective-C章節中有更詳細的討論。
從這里,您可以通過在應用程序委托中編寫Swift代碼或通過選擇文件>新建>文件>(iOS,watchOS,tvOS 或 macOS)> Source> Swift 創建的新Swift文件來開始體驗。
了解Swift導入流程
您的Xcode項目設置完成后,您可以從Cocoa或Cocoa Touch導入任何框架,開始通過Swift使用Objective-C。
任何支持模塊
的 Objective-C框架或C語言庫都可以直接導入到Swift中。這包括所有Objective-C系統框架,例如Foundation,UIKit和SpriteKit以及系統附帶的常用C語言庫。例如,要在Swift文件中使用Foundation API,請將以下import語句添加到文件的頂部:
import Foundation
使用此導入語句,Swift文件現在可以訪問Foundation的所有類,協議,方法,屬性和常量。
導入過程很簡單。Objective-C框架在頭文件中暴露API。在Swift中,這些頭文件被編譯為Objective-C模塊,然后將其導入Swift作為Swift API。導入過程確定在Swift中顯示的Objective-C代碼中聲明的函數、類、方法和類型。對于函數和方法,此過程會影響其參數和返回值的類型。對于類型,導入過程可能會產生以下影響:
- 重新映射某些Objective-C的類型為它們在Swift的同等類型,如
id
為Any
- 重新映射某些Objective-C的核心類型為它們在Swift的替代類型,如
NSString
為String
- 將某些Objective-C概念重新映射為Swift中對應的概念,如指向可選項的指針
有關在Swift中使用Objective-C的更多信息,請參閱與Objective-C API進行交互(章節2)。
注意
您不能將C ++代碼直接導入Swift。而應該為C++代碼創建一個Objective-C或C包裝器。
將Swift導入Objective-C的模型類似于將Objective-C導入Swift的模型。Swift將其暴露的API(例如一個框架)生成Swift模塊。除了生成這些Swift模塊之外,還生成了Objective-C頭文件。這些標頭提供可以映射回Objective-C的API。一些Swift API不會映射回Objective-C,因為它們利用Objective-C中不可用的功能。
有關在Objective-C中使用Swift的更多信息,請參閱同一項目中的Swift和Objective-C。
文章翻譯自Apple Developer Page : Using Swift with Cocoa and Objective-C (Swift 4)
方便大家學習之用,如果翻譯存在錯誤,歡迎指正。