我知道 Swift 不使用命名空间,但名称是在每个模块中定义的。首先,我不太明白这是如何避免名称冲突的 - 请随意详细说明。
尽管如此,我的主要问题是:假设我想要一个不使用 NSTreeNode 的树结构,所以我创建了自己的类,名为“TreeNode”。现在假设 Apple 决定在 Swift 标准库中包含一个用于构建树的类,并且正如预期的那样,他们将其命名为“TreeNode”。然后会发生什么?我的自定义 TreeNode 将与标准库的 TreeNode 发生冲突...在这种情况下我是否必须更改所有代码?或者苹果会承诺Swift的标准库未来不会改变?
编辑:问题已回答here https://stackoverflow.com/a/24293236/3463265(感谢@Martin R 的评论)
Swift 中的命名空间是隐式的。所有类和其他符号都属于它们定义的目标(模块)。因此,如果您定义一个类String
完全限定名称是MyTarget.String
。当存在名称冲突时,您必须在类名前加上定义它的模块(框架)作为前缀,除非当前模块中定义了具有该名称的类 - 该类优先并且不需要前缀。
struct String {
var swiftString = ""
}
var a = String()
var b = Swift.String()
所以如果你创建你的类TreeNode
苹果后来添加了一个TreeNode
同样,如果您仅使用一个模块并且不需要更改任何内容,则您的名字将优先。如果你想使用 SwiftTreeNode
,您需要将其称为Swift.TreeNode
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)