2016-12-06 422 views
5

在蘋果的github上的雨燕包管理器,他們使用什麼是Swift中的import func,struct,class和@_exported?

import func POSIX.isatty 
import func libc.strerror_r 
import var libc.EINVAL 
import var libc.ERANGE 
import struct PackageModel.Manifest 

source

還有一個文件,其中在它的唯一代碼@_exportedsource

@_exported import func libc.fileno 

這是一個斯威夫特3功能?我找不到任何可以在Swift文檔中導入類型的地方,並且在@_exported上沒有任何內容。

回答

9

您可以只導入一個模塊的特定部分,而不是整個模塊:

提供了哪些符號更詳細的限制進口,您可以指定一個模塊或子模塊中的一個特定的部分組件或特定聲明。使用此詳細表單時,只有導入的符號(而不是聲明它的模塊)在當前範圍內可用。

Import Declaration

例如import func POSIX.isatty將從模塊POSIX而不是導入整個模塊POSIX(這是BIG)導入功能isatty

@_exported屬性以下劃線開頭。這意味着它是一個私有的Swift屬性。不是功能,實現細節。 簡而言之,這個屬性允許你從另一個模塊中導出一個符號,就好像它來自你的模塊。

+0

在Swift 3中增加了這些功能嗎? – lostAtSeaJoshua

+1

@lostAtSeaJoshua沒有。我相信從一開始就只是在Swift中導入模塊的一部分。 '@_exported'最初是'@export',但它仍然是未公開的實現細節。 – Sulthan

+0

這有什麼好處?編譯時間更快? – Kdawgwilk