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?
swift 之 namespace的更多相关文章
- AppExtention - today
声明: 本文转自王巍 WWDC 2014 Session笔记 - iOS 通知中心扩展制作入门 本文是我的 WWDC 2014 笔记 中的一篇,涉及的 Session 有 Creating Exten ...
- iOS 通知中心扩展制作初步-b
涉及的 Session 有 Creating Extensions for iOS and OS X, Part 1 Creating Extensions for iOS and OS X, Par ...
- iOS开发系列--Swift进阶
概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...
- ThinkPHP 3.2.3 使用 Swift Mailer 邮件系统发送邮件
SwiftMailer 下载地址:https://github.com/swiftmailer/swiftmailer 版本:swiftmailer-5.x 把压缩包解压到 /ThinkPHP/Lib ...
- Swift利用协议优化NSNotificationCenter
NSNotificationCenter存在的问题 通知没有统一的命名格式 对于通知的命名没有强制的要求,一个项目里可能有多种不同的命名规则.比如: 1 2 3 4 5 6 class Barista ...
- ios -- 教你如何轻松学习Swift语法(一)
目前随着公司开发模式的变更,swift也显得越发重要,相对来说,swift语言更加简洁,严谨.但对于我来说,感觉swift细节的处理很繁琐,可能是还没适应的缘故吧.基本每写一句代码,都要对变量的数据类 ...
- 记OC迁移至swift中笔记20tips
写久了OC后来写swift,总感觉写着是swift的皮毛,但是实际上是OC的核心,这里整理了OC迁移至swift中的一些小细节. 1 在当前类中,实例方法调用属性以及方法都可以将self省略掉,而且是 ...
- swift如何动态创建对象
前言: 在一些大型的项目中常常在加载页面的时候根据服务器请求下来的数据动态创建视图控制器对象,最近的一个项目就有这一方面的需求,加载页面之前需要先请求服务器的数据得到一个JSON字典,根据里面字符串的 ...
- [转载] 对象存储(2):OpenStack Swift——概念、架构与规模部署
原文: http://www.testlab.com.cn/Index/article/id/1085.html#rd?sukey=fc78a68049a14bb228cb2742bdec2b9498 ...
随机推荐
- Hibernate中fetch和lazy介绍
fetch ,指定关联对象抓取的方式,可以设置fetch = "select" 和 fetch = "join".select方式时先查询返回要查询的主体对象( ...
- web网站更换新域名
第一步.绑定新的域名到单独的空间 一般我们都是用的VPS或者不限制建站数量的虚拟主机,尽量的保持原有的IP不变,我这边在老站点同IP的VPS主机下新建一个新域名站点,这样我们可以确保原有的站点IP不变 ...
- 框架应用:Spring framework (一) - IoC技术
IoC概念以及目标 IoC就是让原本你自己管理的对象交由容器来进行管理,其主要的目的是松耦合. IoC发展史 既然IoC的目标是为了松耦合,那它怎么做到的? 最后目标:降低对象之间的耦合度,IoC技术 ...
- vim下处理文档中的\r\n\t字符
问题复现 拿到的文档中包含了大量的\r.\n.\t等字符,形如: \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\ ...
- 使用cocos2d脚本生成lua绑定
这几天要老大要求把DragonBones移到cocos2dx 3.0 里边,并且绑定lua使用接口.因为刚学lua,使用的引擎也刚从2.2改为3.0,各种不熟悉,折腾了好几天才弄完,有空了总结一下 这 ...
- Java中增强for循环的用法
此方法在jdk1.5之后才出现. 1:遍历数组 语法: for (Type value : array) { expression value; } 例子: void Sum() { int[] ar ...
- Opengl4.5 中文手册—G
索引 A B C D E F G H I J K L M N O P Q ...
- [ASP.NET教程] 防止表单重复提交
第一种方法:javascript控制.缺点,一般用户使用没问题,但是懂点js的还是可以强行重复提交.而且,后退再提交,你也没啥办法.第二种方法:服务器控制.后台生成一个token,存入session或 ...
- HIT 1917 Peaceful Commission
这道题题意就是给你n对人,一对中编号为x,x+1,给你m对矛盾,表示这两个人不能同时选. 然后就是Two-Sat的模板题了,就是根据对称性,连边,加缩点,最后拓扑排序,求出一组可行解就可以了. #in ...
- DB2插入数据 sqlcode302 sqlstate22001错误如何解决?
总结:出现这种错误的原因主要是,插入数据时的长度和数据库中定义的长度不匹配或超出限制.