讀古今文學網 > iOS編程基礎:Swift、Xcode和Cocoa入門指南 > 1.10 模塊 >

1.10 模塊

頂層命名空間是模塊。在默認情況下,應用本身就是個模塊,因此也是個命名空間;大概來說,命名空間的名字就是應用的名字。比如,假如應用叫作MyApp,那麼如果在文件頂層聲明一個類Manny,那麼該類的真實名字就是MyApp.Manny。但通常情況下是不需要這個真實名字的,因為代碼已經在相同的命名空間中了,可以直接看到名字Manny。

框架也是模塊,因此它們也是命名空間。比如,Cocoa的Foundation框架(NSString位於其中)就是個模塊。在編寫iOS程序時,你會import Foundation(還有可能import UIKit,它本身又會導入Foundation),這樣就可以直接使用NSString而不必寫成Foundation.NSString了。不過你可以寫成Foundation.NSString,如果在自己的模塊中聲明了一個不同的NSString,那麼為了區分它們,你就只能寫成Foundation.NSString了。你還可以創建自己的框架,當然了,它們也都是模塊。

如示例1-1所示,文件層級之外的是文件所導入的庫或模塊。代碼總是會隱式導入Swift本身。還可以顯式導入,方式就是以import Swift作為文件的開始;但沒必要這麼做,不過這麼做也沒什麼弊端。

這個事實是非常重要的,因為它解決了一個大謎團:如print來自於哪裡,為何可以在任何對象的任何消息之外使用它們?事實上,print是在Swift.h頭文件的頂層聲明的一個函數——你的文件可以看到它,因為它導入了Swift。它就是個普通的頂層函數,與其他函數一樣。你可以寫成Swift.print("hello"),但沒必要,因為並不會出現衝突。

你可以查看Swift.h文件並閱讀和研究它,這麼做很有幫助。要想做到這一點,請按住Command鍵並單擊代碼中的print。此外,還可以顯式import Swift並按住Command鍵,然後單擊Swift來查看其頭文件!你看不到任何可執行的Swift代碼,不過卻可以查看到所有可用的Swift聲明,包括如print之類的頂層函數、+之類的運算符以及內建類型的聲明,如Int和String(查找struct Int、struct String等)。