gpt4 book ai didi

namespaces - Swift 的标准库和名称冲突

转载 作者:IT王子 更新时间:2023-10-29 05:23:15 25 4
gpt4 key购买 nike

我知道 Swift 不使用 namespace ,但名称是在每个模块中定义的。首先,我不太明白这是如何避免名称冲突的 - 请随意详细说明。

尽管如此,我的主要问题是:假设我想要一个不使用 NSTreeNode 的树结构,所以我创建了自己的名为“TreeNode”的类。现在假设 Apple 决定在 Swift 的标准库中包含一个用于构建树的类,并且正如预期的那样,他们将其命名为“TreeNode”。那么会发生什么?我的自定义 TreeNode 将与标准库的 TreeNode 发生冲突...在这种情况下我是否必须更改所有代码?或者 Apple 会 promise Swift 的标准库以后不会改变?

编辑:已回答问题 here (感谢@Martin R 的评论)

最佳答案

Swift 中的命名空间是隐式的。所有类和其他符号都属于它们在其中定义的目标(模块)。因此,如果您定义类 String,则完全限定名称将为 MyTarget.String。当发生名称冲突时,您必须在类名前加上定义它的模块(框架),除非当前模块中定义了具有该名称的类 - 此类优先且不需要前缀。

struct String {
var swiftString = ""
}

var a = String()
var b = Swift.String()

因此,如果您创建了类 TreeNode 并且 Apple 稍后也添加了一个 TreeNode,那么如果您只使用一个模块,则您的名字将优先,而您不会需要改变任何东西。如果您想使用 Swift 的 TreeNode,您需要将其称为 Swift.TreeNode

关于namespaces - Swift 的标准库和名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25231650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com