gpt4 book ai didi

swift - 为什么 Swift 允许访问同一文件中的私有(private)变量?

转载 作者:搜寻专家 更新时间:2023-10-30 21:55:09 26 4
gpt4 key购买 nike

我刚刚发现 Swift 的 private 访问修饰符是文件级别的,如 docs 中所规定的那样在“访问级别”下:

Private access in Swift differs from private access in most other languages, as it’s scoped to the enclosing source file rather than to the enclosing declaration. This means that a type can access any private entities that are defined in the same source file as itself, but an extension cannot access that type’s private members if it’s defined in a separate source file.

所以这意味着当类型在同一文件中时,以下代码将编译:

class FirstType {
private var privateProperty: String = ""
}

class SecondType {
private let firstType = FirstType()

func messWithFirstType() {
firstType.privateProperty = "👻" // this compiles and works!
}
}

据我所知,这打破了 encapsulation完全地。另一方面,为了可读性,将一些相关类型组合在同一个文件中可能会很好,尤其是当相关类型很小(如枚举)时。

私有(private)扩展是一个异常(exception),因为它们扩展的是文件要包含的相同类型。私有(private)扩展确实带来了一些nice things .

除了促进私有(private)扩展之外,还有其他原因让文件范围 private 访问修饰符出现在 Swift 中吗?

最佳答案

我不清楚为什么 private 最初是针对文件实现的,但请放心,Swift 的人知道这不是 private 的唯一可能含义> 并且它对于某些目的来说并不理想,并且正在努力改变它。已经有一个 proposal在表中,为 Swift 3 所接受,这会将当前的 private 转换为 fileprivate 并添加一个新的 private 级别,该级别将被限定为类型而不是文件。您可以期待在不久的将来看到它成为 Swift 3 的一部分。

关于swift - 为什么 Swift 允许访问同一文件中的私有(private)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37747677/

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