讀古今文學網 > iOS編程基礎:Swift、Xcode和Cocoa入門指南 > 1.9 命名空間 >

1.9 命名空間

命名空間指的是程序中的具名區域。命名空間具有這樣一個屬性:如果事先不穿越區域名這一屏障,那麼命名空間外的事物是無法訪問到命名空間內的事物的。這是一個好想法,因為通過命名空間,我們可以在不同地方使用相同的名字而不會出現衝突。顯然,命名空間與作用域是緊密關聯的兩個概念。

命名空間有助於解釋清楚在一個對像頂層聲明另一個對象的意義,比如:


class Manny {
    class Klass {}
}  

通過這種方式來聲明Klass會使得Klass成為一個嵌套類型,並且很好地將其「隱藏」到Manny中。Manny就是個命名空間!Manny中的代碼可以直接看到Klass,不過Manny外的代碼則看不到。需要顯式指定命名空間才能穿過命名空間所代表的屏障。要想做到這一點,必須先使用Manny的名字,後跟一個點,然後是術語Klass。簡而言之,需要寫成Manny.Klass。

命名空間本身並不會提供安全或隱私;只是提供了便捷的手段而已。因此,在示例1-1中,我給Manny一個Klass類,也給Moe一個Klass類。不過它們之間並不會出現衝突,因為它們位於不同的命名空間中,如果必要,我可以通過Manny.Klass與Moe.Klass來區分它們。

毫無疑問,顯式使用命名空間的語法依舊是消息發送點符號語法,事實上,它們是一回事。

實際上,你可以通過消息發送進入本無法進入的作用域。Moe中的代碼不能自動看到Manny中聲明的Klass,不過可以採取一個額外的步驟來實現這個目標,即通過Manny.Klass。之所以可以這麼做是因為它能看到Manny(因為Manny聲明的層級可以被Moe中的代碼看到)。