場景: php
項目中類名過長,形成不能根據文件名區分出來,而且若是一個模塊的類較多時,很難取一個比較優雅的名字。爲了使模塊名可讀, 咱們通常的作法就是添加模塊前綴。可是若是模塊中還有個子模塊,若是還繼續按這種方法的話,這個文件名就會特別的長。c++
1. 一級 (Me Module)swift
MeMainController app
MeEditController MeAboutControllerspa
2. 兩級(Me > Profile Module)blog
MeProfileChangePasswordControllerip
MeProfileChangeAvatorController開發
這個時候文件的名字太長就不優雅,想一想咱們取這麼長名字的初衷,無非就是想達到項目中類名 惟一,可讀 不衝突的get
NameSpaceit
swift 的namespace ,學過c++, php 的都知道,跟他們的很不同. Swift 的命名空間是基於 module
而不是在代碼中顯式地指明,每一個 module 表明了 Swift 中的一個命名空間。也就是說,同一個 target 裏的類型名稱
仍是不能相同的。在咱們進行 app 開發時,默認添加到 app 的主 target 的內容都是處於同一個命名空間中.
1. 不一樣target, 這裏就不在這裏累贅,請參考我下面的參考>命名空間有詳細的解釋
2. 在通一個項目中,我麼如何達到這種namespace的效果
//1. 用struct 包含
//
struct PackageOne {
} extension PackageOne { class Class { var name: String init(name: String) { self.name = name } } } print("\(PackageOne.Class.self)") let tmp = PackageOne.Class(name: "hell") print(tmp) // 用class包含 class TestClass { } extension TestClass { class MyClass { var name: String init(name: String){ self.name = name } } } let test = TestClass.MyClass(name: "Test") print(test)
從上面的代碼中,啓發咱們在項目中的具體應用:
1. 對於View
// 項目中運用: struct MeModule { struct Views{} struct ViewControllers{} } // 這是一個View extension MeModule.Views { class Edit: UIView{ } } extension MeModule.Views { class Update: UIView { } }
2. 對於ViewController
// 這是一個Controller extension MeModule.ViewControllers { class Edit: UIViewController { } } extension MeModule.ViewControllers { class Update: UIViewController { } }
用naspace使得類名惟一 ,上面的兩種情形,對於文件夾的組織 咱們就會
MeModule>Views>Edit> Edit.Swift
MeModule> Views>Update>Update.swift
MeModule>ViewControllers>Edit>EditController.swift
MeModule>ViewControllers>Update>UpdateController.swift
使得文件惟一。
參考:
1. 命名空間