zoukankan      html  css  js  c++  java
  • swift 之 namespace

    场景: 

    项目中类名过长,造成不能根据文件名区分出来,并且如果一个模块的类较多时,很难取一个比较优雅的名字。为了使模块名可读, 我们一般的做法就是添加模块前缀。但是如果模块中还有个子模块,如果还继续按这种方法的话,这个文件名就会特别的长。

    1. 一级 (Me Module)

    MeMainController  

    MeEditController  MeAboutController

    2. 两级(Me > Profile Module)

    MeProfileChangePasswordController

    MeProfileChangeAvatorController

    这个时候文件的名字太长就不优雅,想想我们取这么长名字的初衷,无非就是想达到项目中类名 唯一,可读 不冲突的

    NameSpace

    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?

  • 相关阅读:
    二分搜索
    中文分词 (机械传统方法 )正向最大匹配
    推荐引擎概述(转自IBM worker)
    linux OS 多线程学习
    FastReport.Net传递报表参数
    MSSQL 2008 镜像的客户端数据库连接字符串
    FastReport.Net自动行高
    ReSharper 8.0开发版 ReSharper 8.0 Early Access
    客户端FastReport.Net默认界面语言
    ReSharper 7.0 正式版发布
  • 原文地址:https://www.cnblogs.com/Ohero/p/5516099.html
Copyright © 2011-2022 走看看