swift不同地方 命名空间module iOS

来源:互联网 发布:fbreader源码画线功能 编辑:程序博客网 时间:2024/06/05 17:28

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

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


以下两个类分别在两个不同的文件


使用时,出现冲突,只需在类名前加上moduole的名称(也就是target名称):



在同一个target中,也有另一个解决方法:

将名字重复的类型定义到不同的struct中,以此避免冲突.