场景: 

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

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?

swift 之 namespace的更多相关文章

  1. AppExtention - today

    声明: 本文转自王巍 WWDC 2014 Session笔记 - iOS 通知中心扩展制作入门 本文是我的 WWDC 2014 笔记 中的一篇,涉及的 Session 有 Creating Exten ...

  2. iOS 通知中心扩展制作初步-b

    涉及的 Session 有 Creating Extensions for iOS and OS X, Part 1 Creating Extensions for iOS and OS X, Par ...

  3. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

  4. ThinkPHP 3.2.3 使用 Swift Mailer 邮件系统发送邮件

    SwiftMailer 下载地址:https://github.com/swiftmailer/swiftmailer 版本:swiftmailer-5.x 把压缩包解压到 /ThinkPHP/Lib ...

  5. Swift利用协议优化NSNotificationCenter

    NSNotificationCenter存在的问题 通知没有统一的命名格式 对于通知的命名没有强制的要求,一个项目里可能有多种不同的命名规则.比如: 1 2 3 4 5 6 class Barista ...

  6. ios -- 教你如何轻松学习Swift语法(一)

    目前随着公司开发模式的变更,swift也显得越发重要,相对来说,swift语言更加简洁,严谨.但对于我来说,感觉swift细节的处理很繁琐,可能是还没适应的缘故吧.基本每写一句代码,都要对变量的数据类 ...

  7. 记OC迁移至swift中笔记20tips

    写久了OC后来写swift,总感觉写着是swift的皮毛,但是实际上是OC的核心,这里整理了OC迁移至swift中的一些小细节. 1 在当前类中,实例方法调用属性以及方法都可以将self省略掉,而且是 ...

  8. swift如何动态创建对象

    前言: 在一些大型的项目中常常在加载页面的时候根据服务器请求下来的数据动态创建视图控制器对象,最近的一个项目就有这一方面的需求,加载页面之前需要先请求服务器的数据得到一个JSON字典,根据里面字符串的 ...

  9. [转载] 对象存储(2):OpenStack Swift——概念、架构与规模部署

    原文: http://www.testlab.com.cn/Index/article/id/1085.html#rd?sukey=fc78a68049a14bb228cb2742bdec2b9498 ...

随机推荐

  1. asp.net mvc项目实记-开启伪静态-Bundle压缩css,js

    百度这些东西,还是会浪费了一些不必要的时间,记录记录以备后续 一.开启伪静态 如果不在web.config中配置管道开关则伪静态无效 首先在RouteConfig.cs中中注册路由 routes.Ma ...

  2. SQL Server 2016 Alwayson新增功能

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/ 概述 SQLServer2016发布版本到现在已有一年多的时间了,目前最新的稳定版本是SP1版本.接下来就开看看2016在Alw ...

  3. ThinkPHP中:多个项目共享同一个session问题

    使用ThinkPHP3.1.3版本的session时,多个项目同时调试会使得一维数组式的session不够用,导致在A项目登录后台后,在B项目就不用登录后台就可以进入后台操作了. 问题在于他们都调用同 ...

  4. java编程基础复习-------第二章

    一.标识符 java中标识符的命名规则: 以数字.字母.下划线和$符号组成:不能用数字开头:不能是java的关键字. 注意:不要用$命名标识符.习惯上,$只用在机器自动产生的源代码中. 二.关键字 1 ...

  5. mybatis错误——java.io.IOException: Could not find resource com/xxx/xxxMapper.xml

    在学习Mybatis的时候,参考网上的教程进行简单demo的搭建,配置的没有问题,然后出现了下面的错误! Exception in thread "main" java.lang. ...

  6. R语言包下载(转载)

    http://blog.csdn.net/hongjinlongno1/article/details/53130893 包含几乎所有包,很方便

  7. JS脚本检查密码强度

    <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con ...

  8. nodejs后台集成富文本编辑器(ueditor)

    1 下载ueditor nodejs版本 2 复制public目录下面的文件 到项目静态资源public文件夹下 3 在项目根目录创建ueditor文件夹 要复制进来的内容为 4 在根目录的 uedi ...

  9. Winform常用的一些功能收集(持续更新)

    #region progressBar实时显示进度 private void button1_Click(object sender, EventArgs e) { int i = 10000; pr ...

  10. zabbix基本操作

    zabbix基本操作 ---- 2016年终总结 二 包括的内容: 添加主机 查看监控数据 添加监控项 创建触发器 创建模版 添加报警 添加媒介 添加主机 进入页面 点击Configuration(大 ...