swift不同地方 命名空间module iOS
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的更多相关文章
- Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 (主要是NSLayoutConstraint 的使用)
当前位置: > Swift新手入门 > Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 时间:2014-09-10 16:49来源:未知 作者:啊成 举报 点击:5 ...
- Swift基础之如何使用iOS 9的Core Spotlight框架
本文由CocoaChina译者KingOfOnePiece(博客)翻译 作者:GABRIEL THEODOROPOULOS?校对:hyhSuper 原文:How To Use Core Spotlig ...
- Swift 之cannot load module 'main' as 'Swift'
如果建立一个Project, 选Command Line程序,语言选Swift, 完成之后会有一个main.swift文件.这个文件用来练算法最好了,因为playground会有各种限制而且bug多多 ...
- 使用swift和rails来实现ios账号系统
前不久看到这样一篇教程User Accounts on iOS with Ruby on Rails and Swift,里面描述了如何使用swift和rails来前后台配合来实现一个简单的类似twi ...
- iOS开发系列--Swift进阶
概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...
- IOS开发之SWIFT进阶部分
概述 上一篇文章<iOS开发系列--Swift语言> 中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用 ...
- [iOS翻译]《The Swift Programming Language》系列:Welcome to Swift-01
注:CocoaChina翻译小组已着手此书及相关资料的翻译,楼主也加入了,多人协作后的完整译本将很快让大家看到. 翻译群:291864979,想加入的同学请进此群哦.(本系列不再更新,但协作翻译的进度 ...
- 33 个 2017 年必须了解的 iOS/swift 开源库第三方库
本文翻译自Medium,原作者为 Paweł Białecki<img src="https://pic3.zhimg.com/v2-c786777447261347b0d97 ...
- iOS、swift、React Native学习常用的社区、论坛
<!----iOS> <!----Swift>*IOS开发常用社区:http://code4app.com/ *IOS开发常用社区:http://www.cocoachina. ...
随机推荐
- javaScript复制粘贴
1.clipboard.js 实现了纯 JavaScript (无 Flash)的浏览器内容复制到系统剪贴板的功能.可以在浏览器和 Node 环境中使用.支持 Chrome 42+.Firefox 4 ...
- 在Orchard CMS Theme 用代码定义布局Widgets
因为公司业务需要,经过本人几个月尝试,使用Orchard CMS 开发一个简单的企业门户(地址是http://www.ubof.cn).在刚开始接触Orchard CMS,对于个性化的网页布局不知道怎 ...
- 有关 enum的重新理解
有关enum 的再次理解: 所有的枚举都继承自java.lang.Enum类. 说到底enum也只是一个java类,只不过他有几个特殊的点. 1.enum中的各个实例,就是enum的static实 ...
- idea导出配置
- 基于TINY4412的Andorid开发-------简单的LED灯控制【转】
本文转载自:http://www.cnblogs.com/pengdonglin137/p/3857724.html 基于TINY4412的Andorid开发-------简单的LED灯控制 阅读 ...
- POJ3164 Command Network —— 最小树形图
题目链接:https://vjudge.net/problem/POJ-3164 Command Network Time Limit: 1000MS Memory Limit: 131072K ...
- 小程序-demo:天气预报
ylbtech-小程序-demo:天气预报 1.返回顶部 1.app.js //app.js App({ //系统事件 onLaunch: function () {//小程序初始化事件 var th ...
- jsp中page指令用法详解
转自:https://www.jb51.net/article/73428.htm 一.JSP 指令 JSP 指令(directive)影响由 JSP 页面生成的 servlet 的整体结构.下面的模 ...
- CCF 201409-1 相邻数对 (水题)
问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一行包含一个整数n,表示给定整数的个数. 第二行包含所给定的n个整数. 输出格式 输出一个整数,表示值正好 ...
- iOS 消除Xcode警告
- undeclared selector #pragma clang diagnostic push #pragma clang diagnostic ignored"-Wundeclar ...