Geo*_*rge 13 naming namespaces naming-conventions standard-library swift
我知道Swift不使用名称空间,但是这些名称是在每个模块中定义的.首先,我不太清楚如何避免名称冲突 - 随意详细说明.
不过,我的主要问题是:假设我想要一个不使用NSTreeNode的树结构,所以我创建了自己的名为"TreeNode"的类.现在让我们假设Apple决定在Swift的标准库中包含一个用于构建树的类,并且正如预期的那样,他们将其命名为"TreeNode".那么会发生什么?我的自定义TreeNode将与标准库的TreeNode冲突......在这种情况下我是否必须更改所有代码?或许Apple会承诺Swift的标准库将来不会改变?
编辑:问题在这里得到解答(感谢@Martin R的评论)
Mar*_*rný 24
Swift中的命名空间是隐含的.所有类和其他符号都属于它们所定义的目标(模块).因此,如果您定义一个类,String
则完全限定名称MyTarget.String
.当存在名称冲突时,您必须在类名称前面加上它所定义的模块(框架),除非在当前模块中定义了具有该名称的类 - 此类优先且不需要前缀.
struct String {
var swiftString = ""
}
var a = String()
var b = Swift.String()
Run Code Online (Sandbox Code Playgroud)
因此,如果您创建了您的类,TreeNode
并且Apple稍后也添加了一个TreeNode
,那么如果您只使用一个模块并且您不需要更改任何内容,那么您的名称将优先.如果您想使用Swift TreeNode
,则需要将其称为Swift.TreeNode
.
归档时间: |
|
查看次数: |
4369 次 |
最近记录: |