swift 之 namespace

場景: 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. 命名空間

2. how to use Namespace in Swift?

相關文章
相關標籤/搜索