2016-09-14 85 views
2

Swift具有模塊化代碼,可以將它們分類爲模塊。Swift包和模塊之間有什麼區別?

但是你可以使用Swift Package Manager來獲取和安裝模塊。

「Swift包」和「Swift模塊」之間是否有區別?我應該什麼時候使用一個短語或其他?

回答

0

Swift.org

模塊提到:夫特組織碼成模塊。每個模塊都指定一個名稱空間並強制執行訪問控制,該代碼的部分代碼可以在模塊外部使用。

程序可能將其所有代碼都放在一個單獨的模塊中,也可能將其他模塊作爲依賴項導入。除了少數幾個 系統提供的模塊(例如macOS上的Darwin或Linux上的Glibc),大多數依賴項都需要下載和構建代碼,以便使用 。

當您使用單獨的模塊代碼解決特定的問題時,該代碼可以在其他情況下重用。例如,提供網絡請求功能的 模塊可以是在照片共享應用程序和天氣應用程序之間共享的 。使用模塊 可讓您建立在其他開發人員的代碼之上,而不是 自己重新實現相同的功能。

程序包:包由Swift源文件和清單文件組成。名爲Package.swift的清單文件使用PackageDescription模塊定義了 包的名稱及其內容。

包裝有一個或多個目標。每個目標都指定一個產品,並且可能會聲明一個或多個依賴項。

12

Swift包是一個源代碼的集合...你可以把它看作一個自包含的項目,它有自己的版本和存儲庫。 Swift語言本身並不瞭解當前的包,它只是由Swift包管理器使用的概念。

迅速包可以包含一個或多個模塊夫特 - 每個夫特模塊東西語言知道,並且迅捷模塊定義的之類的東西,例如訪問控制(publicinternalprivate)的範圍。一個Swift包也可以包含其他類型的目標或模塊,例如它可以包含一個C源代碼體構建到一個庫中。

Swift包在某種意義上類似於Xcode項目,而Swift模塊類似於Xcode目標。

作爲具體的例子https://github.com/apple/example-package-fisheryates夫特包(如在頂層標誌着由Package.swift),由它的URL識別,它包含有兩個源的單一夫特模塊: https://github.com/apple/example-package-fisheryates/tree/master/Sources

+2

謝謝,這個比喻非常有幫助 –

+0

模塊是一個.framework還是一個由.swift文件組成的文件夾? – eonist