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?

时间: 2024-11-09 11:16:47

swift 之 namespace的相关文章

iOS开发日记55-通知栏扩展(App Extension)

今天博主有一个App Extension的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. 总览 扩展 (Extension) 是 iOS 8 和 OSX 10.10 加入的一个非常大的功能点,开发者可以通过系统提供给我们的扩展接入点 (Extension point) 来为系统特定的服务提供某些附加的功能.对于 iOS 来说,可以使用的扩展接入点有以下几个: Today 扩展 - 在下拉的通知中心的 "今天" 的面板中添加一个 widget 分享扩展 - 点击分享按钮后将网

Swift备忘录

Swift 备忘录 2015-4 一.简介 1.Swift 语言由苹果公司在2010年7月开始设计,在 2014 年6月推出,在 2015 年 12 月 3 日开源 2.特点(官方): (1)苹果宣称 Swift 的特点是:快速.现代.安全.互动,而且明显优于 Objective-C 语言 (2)可以使用现有的 Cocoa 和 Cocoa Touch 框架 (3)Swift 取消了 Objective-C 的指针及其他不安全访问的使用 (4)舍弃 Objective-C 早期应用 Smallta

swift项目第四天:动态加载控制器

一:Appdelegate import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { /* 总结: 1:1:window为可选类型,可选类型的定义:var window: UIWindow?,可选类型就是可以为空值nil或是有值,若是想获得可选类型的值,则可以进行可选绑定或是强制解包,若是强制解包必须要保证强制解包的值不为nil,若为nil会产生崩溃,一般可选绑定用guard e

Swift中文教程(五)--对象和类

原文:Swift中文教程(五)--对象和类 Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文里面,否则,方法和函数的写法也是这样: 1 class Shape { 2 var numberOfSides = 0 3 func simpleDescription() -> String { 4 return "A shape with \(numberOfSides) sides.&q

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

SwiftMailer 下载地址:https://github.com/swiftmailer/swiftmailer 版本:swiftmailer-5.x 把压缩包解压到 /ThinkPHP/Library/Vendor 中. 配置文件 config.php <?php return array( //'配置项'=>'配置值' // 邮件配置 'SMTP' => 'smtp.XXX.cn', 'MAIL_PORT' => 25, 'MAIL_USER' => '[email

1.swift简介

1.Swift 开发快速体验 1.1 目标 playground 快速体验 & 学习资源分享 项目开发快速体验,了解 Swift 基本程序结构 1.2 学习资源 苹果官方博客 https://developer.apple.com/swift/blog/ 苹果官方 Swift 2.0 电子书 https://itunes.apple.com/us/book/id1002622538 2.0 中文版 http://wiki.jikexueyuan.com/project/swift/ 100个Sw

Awesome Swift

Awesome Swift A collaborative list of awesome Swift resources,inspired by awesome-python and listed on awesome-awesomeness. Feel free to contribute! Awesome Swift Demo Apps iOS Apple Watch OS X Dependency Managers Guides Editor Support Vim Libs Anima

【转】如何评价 Apple 新推出的编程语言 Swift?

如何评价 Apple 新推出的编程语言 Swift? 原文地址:http://www.zhihu.com/question/24002984 评价:如果你会Objective-C,你不需要去看它. 如果问我这语言对普通开发者重要不重要,我说重要,可以明确告诉你这一点--它是Apple 在WWDC 向全世界推出的重磅语言我怎么能说它不重要?它降低了入门的门槛.使得大量的JS, Python, Ruby用户会使用Apple 的技术为其开发程序.它的作用,和Core Data, Interface B

iOS开发系列--Swift进阶

概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用Swift进行iOS开发还是不够的.在这篇文章中将继续介绍一些Swift开发中一些不常关注但是又必备的知识点,以便对Swift有进一步的了解. 访问控制 和其他高级语言一样Swift中也增加了访问控制,在Swift中提供了private.internal.public三种访问级别,但是不同的是Swift中的访问