如何在SWIFT中使用命名空间?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (39)

文档只提到嵌套类型,但不清楚它们是否可以用作名称空间。我没有发现任何关于名称空间的明确提及。

提问于
用户回答回答于

名称空间不是每个文件;它们是每个目标(基于“ProductModuleName”构建设置)。所以你最终会得到这样的结果: 导入框架---导入框架B FrameworkA.foo() 所有SWIFT声明都被认为是某个模块的一部分,所以即使您说NSLog“(是的,它仍然存在)你得到了斯威夫特认为的”Foundation.NSLog

SWIFT中隐含了名称起搏,所有类(等)都由模块(XCode目标)隐式限定范围。不需要类前缀

用户回答回答于

例如,WWDC视频指出,如果要导入的框架有一个类MyClass,而您的代码有一个类MyClass,那么这些名称不会冲突,因为“名称损坏”给它们提供了不同的内部名称。然而,在现实中,他们冲突,也就是代码的MyClass赢了,不能指定“不,不,我指的是框架中的MyClass”--说TheFramework.MyClass不起作用。

我的经验是,斯威夫特因此一点也不叫名字。当我将我的一个应用程序从Object-C转换成SWIFT时,我创建了一个嵌入式框架,因为它非常容易,很酷。然而,导入框架时,会导入框架中的SWIFT内容--因此,在预告中,再次只有一个名称空间,而且它是全局的。而且没有SWIFT标题,所以你不能隐藏任何名字。

编辑:在SEED 3中,这个特性现在开始在线运行,从以下意义上讲:如果您的主代码包含MyClass,而框架MyFramework包含MyClass,则前者在默认情况下会超过后者,但是可以使用语法达到框架中的一个。MyFramework.MyClass,因此,我们实际上有一个不同名称空间的基础!

编辑2:在种子4,我们现在有访问控制!另外,在我的一个应用程序中,我有一个嵌入式框架,而且可以肯定的是,默认情况下,一切都是隐藏的,我必须显式地公开所有的公共API。这是一个很大的进步。

扫码关注云+社区