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 ...
随机推荐
- 《MySQL必知必会》[03] 表数据的增删改
1.增:插入数据 INSERT关键字可以插入新的行到数据库表中: 插入完整的行 插入行的一部分 插入多行 插入某些查询的结果 基本的INSERT语句是: INSERT INTO R(A1, A2, . ...
- ActiveMQ_Windows版本的安装部署
1, 保证电脑上安装了jdk6以上版本的java,并配置了好环境变量 : 2, 官方下载地址:http://activemq.apache.org/download-archives.html ,这里 ...
- [UWP]分享一个基于HSV色轮的调色板应用
1. 前言 上一篇文章介绍了HSV色轮,这次分享一个基于HSV色轮的调色板应用,应用地址:ColorfulBox - Microsoft Store 2. 功能 ColorfulBox是Adobe 色 ...
- Ansible系列(五):playbook应用和roles自动化批量安装示例
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- DelayQueue使用示例之KTV包厢记时
在学习Java 多线程并发开发过程中,了解到DelayQueue类的主要作用:是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走. ...
- ”TCP连接“究竟是什么意思?
我们经常听到"建立TCP连接","服务器的连接数量有限"等,但仔细一想,连接究竟是个什么东西,是和电话一样两端连起一根线?似乎有点抽象不是么? 1. 久违的分组 ...
- Scanner(键盘录入)
注意事件: 1: 当使用Scanner类时 切记不要做从键盘输入一个int数 再输入一个字符串 这样会导致bug就是字符串会读取不到几所输入的内容 原因是因为:当你用了NextInt()方法时,再按了 ...
- Apache CXF入门
CXF简介 Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了.CXF 继承了 Celtix 和 XFire 两大 ...
- 转换时间对象和字符串对象&添加时间
/* *基本思路,将字符串时间转化为时间对象,通过毫秒数来加减时间,然后在转化为字符串输出 */ //转化字符时间yy-mm-dd hh:mm:ss 为时间对象 使用split进行字符串的分割,取 ...
- WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系
WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系: 1.Canvas/WrapPanel控件: 其子控件的HorizontalAlign ...