Objective-C没有命名空间,为了避免冲突,Objective-C的类型一般都会加上两到三个字母的前缀,比如Apple保留的NS和UI前缀,各个系统框架的前缀,各个系统框架的前缀SK(StoreKit),CG(CoreGraphic)等。

Swift的命名空间是基于module而不是在代码中显示地指明,每个module代表了Swift中的一个命名空间。也就是说,同一个target里的类型名称还是不能相同的。

//MyFramework.swift

//这个文件存在于MyFramework.framework中

public class MyClass {

public class func hello() {

println("hello from framework")

}

}

//MyApp.swift

//这个文件存在于app的主target中

class MyClass {

class func hello() {

println("hello from app")

}

}

在使用时,在可能出现冲突的时候,我们需要在类型名称前面加上module的名字(也就是target的名字):

MyClass.hello()

//hello from app

MyFramework.MyClass.hello()

//hello from framework

另一种策略是使用类型嵌套的方法来指定访问的范围。常见的做法是将名字重复的类型定义到不同的struct中,以此避免冲突。这样在不使用多个module的情况下也能取得隔离同样名字的类型的效果:

struct MyClassContainer1 {

class MyClass {

class func hello() {

println("hello from MyClassContainer1")

}

}

}

struct MyClassContainer2 {

class MyClass {

class func hello() {

println("hello from MyClassContainer2")

}

}

}

MyClassContainer1.MyClass.hello()

MyClassContainer2.MyClass.hello() --------------------- 本文来自 和纱Kazusa 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/liangliang2727/article/details/51195502?utm_source=copy

swift的改进最大的地方之一,就是拥有了Objective-C一直令人诟病的地方没用命名空间,就是所有代码和静态库最终都会编译到同一个域和二进制中. 因为这种机制,导致在加入静态库时导致冲突和失败,为了避免这种情况. Objective-C的做法是一般加上前缀,比如Apple的UI和NS前缀,各个系统框架加上SK,CG等. 虽然这种解决办法能大大降低冲突,但是加上前缀并不能完全避免冲突. 另一种情况就是你想使用两个不同的库,他们分别引用了同一个很流行的库,大家公用的第三方库就会产生冲突.

终于说到swift, swift中由于可以使用命名空间,即时名字相同的类型,只要是来自不同的命名空间,都可以和平共处. 跟C#的显式指定命名空间不同,swift的命名空间基于module而不是显式指明,二每个module代表了swift中的一个命名空间,也就是说,同一个target里的类型名称还是不能相同.  在开发中,默认都是添加到主target,所以都处于同一个命名空间,并不能使用相同的名字. 我们需要通过创建cocoa(Touch)Framework方法新建一个module,这样就可以在两个不同的target添加相同的名称类型.

--------------------- 本文来自 A了个K 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/oDream122/article/details/73526702?utm_source=copy

swift不同地方 命名空间module iOS的更多相关文章

  1. Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 (主要是NSLayoutConstraint 的使用)

    当前位置: > Swift新手入门 > Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 时间:2014-09-10 16:49来源:未知 作者:啊成 举报 点击:5 ...

  2. Swift基础之如何使用iOS 9的Core Spotlight框架

    本文由CocoaChina译者KingOfOnePiece(博客)翻译 作者:GABRIEL THEODOROPOULOS?校对:hyhSuper 原文:How To Use Core Spotlig ...

  3. Swift 之cannot load module 'main' as 'Swift'

    如果建立一个Project, 选Command Line程序,语言选Swift, 完成之后会有一个main.swift文件.这个文件用来练算法最好了,因为playground会有各种限制而且bug多多 ...

  4. 使用swift和rails来实现ios账号系统

    前不久看到这样一篇教程User Accounts on iOS with Ruby on Rails and Swift,里面描述了如何使用swift和rails来前后台配合来实现一个简单的类似twi ...

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

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

  6. IOS开发之SWIFT进阶部分

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

  7. [iOS翻译]《The Swift Programming Language》系列:Welcome to Swift-01

    注:CocoaChina翻译小组已着手此书及相关资料的翻译,楼主也加入了,多人协作后的完整译本将很快让大家看到. 翻译群:291864979,想加入的同学请进此群哦.(本系列不再更新,但协作翻译的进度 ...

  8. 33 个 2017 年必须了解的 iOS/swift 开源库第三方库

    本文翻译自Medium,原作者为 Paweł Białecki&lt;img src="https://pic3.zhimg.com/v2-c786777447261347b0d97 ...

  9. iOS、swift、React Native学习常用的社区、论坛

    <!----iOS> <!----Swift>*IOS开发常用社区:http://code4app.com/ *IOS开发常用社区:http://www.cocoachina. ...

随机推荐

  1. 不常见使用的css

    flex和white-space等属性 1.flex属性让所有弹性盒模型对象的子元素都有相同的长度,忽略它们内部的内容.style={{flex:5}},该元素占父元素的六分之五. 2. white- ...

  2. leetcode 659. Split Array into Consecutive Subsequences

    You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...

  3. leetcode 660. Remove 9

    Start from integer 1, remove any integer that contains 9 such as 9, 19, 29... So now, you will have ...

  4. bzoj3272: Zgg吃东西&&3267: KC采花

    口胡 我们容易得到一个费用流的做法,流出k的流量分配给各个点,各个点向下一个点流费用为它的价值的边,然后汇总到ed 观察发现对于流一次,相当于选择了一个区间 如果流了反向边,相当于减去了这一段 可以用 ...

  5. POJ3159 Candies —— 差分约束 spfa

    题目链接:http://poj.org/problem?id=3159 Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submiss ...

  6. 一步一步学Silverlight 2系列(2):基本控件

    述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  7. Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)——无非是在传统遍历过程中修改叶子结点加入后继结点信息(传统是stack记录),然后再删除恢复

    先看看线索二叉树 n个结点的二叉链表中含有n+1(2n-(n-1)=n+1)个空指针域.利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索 ...

  8. linux下的git安装及配置

    一.yum安装方式 1.安装 $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel $ yum -y ...

  9. Synchronized的使用和注意事项

    synchronized: 1.取得的锁都是对象锁,而不是把一段代码或方法(函数)当作锁: 2.多个线程访问的必须是同一个对象. 3.当一个线程执行的代码出现异常时,其所持有的锁会自动释放 4.A线程 ...

  10. bzoj2002 [Hnoi2010]Bounce 弹飞绵羊——分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2002 第一次用分块,感觉超方便啊: 如果记录每个点的弹力系数,那么是O(1)修改O(n)查询 ...