gpt4 book ai didi

swift - 在 Swift 3 中, 'private class Foo' 和 'fileprivate class Foo' 在成员变量方面有区别吗?

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:55 24 4
gpt4 key购买 nike

特别是关于成员变量,Swift 3 中的以下内容有区别吗?在这两种情况下,同一个文件中的所有代码都可以访问 Foo。隐式作用域的“laa”属性也是如此,这似乎与文档相矛盾。

If you define a type’s access level as private or file private, the default access level of its members will also be private or file private.

但是,在下面的两种情况下,“laa”可以从同一文件中的其他类访问,这意味着它是文件私有(private)的,而不是文档所说的第一个应该是私有(private)的。

private class Foo
{
var laa:String
}

fileprivate class Foo
{
var laa:String
}

最佳答案

this Q&A 中所述– 顶级 privatefileprivate 声明之间的访问级别没有区别。 private 只是意味着它只能在封闭范围内访问1,并且在顶层——文件那个范围。

关于 the documentation comment :

If you define a type’s access level as private or file private, the default access level of its members will also be private or file private.

我会说这是不正确的,或者至少在 private 的情况下具有误导性。默认情况下,给定类型的成员可见的范围是类型声明自身可见的范围(访问级别高于internal的除外)。

因此,private 类型的成员可访问的范围默认是定义该类型的封闭范围。在顶层,就是文件。

仅仅说类型成员默认为 internal 可能更简单。在访问级别低于此级别的类型中声明(例如 privatefileprivate)只会阻止成员在这些访问级别之外可见(因为它不会在无法看到类型本身的情况下引用给定类型的成员是有意义的)。


1。请注意,在 Swift 4 中,根据 SE-0169 , 在与类型相同的源文件中声明的给定类型的扩展具有与类型声明的范围相同的访问控制范围。因此他们可以访问该类型的 private 成员。

关于swift - 在 Swift 3 中, 'private class Foo' 和 'fileprivate class Foo' 在成员变量方面有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43503274/

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