使用 Swift 4,我在同一个文件中定义了两个结构,其中一个是私有的,所以这个文件是唯一可以访问它的。此外,我依赖于结构的默认初始值设定项,即我没有明确定义一个:
private struct A {
private let string: String
func foo() {}
}
struct B {
func bar() {
A(string: "baz").foo()
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这将无法编译并出现以下错误:
由于“私有”保护级别,“A”初始值设定项无法访问
我不想A访问其他文件,所以我试图通过制作它来解决它fileprivate(这应该相当于private在这种情况下),但是会发生相同的编译错误(并且它仍然抱怨保护级别是private)。
如何在保留此结构的同时避免显式初始化fileprivate?
Gob*_*obe 20
事实证明,初始化程序的访问级别仅与最易访问的实例变量一样可访问。
如果我使string实例变量不是private,错误就会消失:
private struct A {
let string: String
// default initializer: init(string: String)
func foo() {}
}
Run Code Online (Sandbox Code Playgroud)
因此,鉴于B现在可以读取A's string,它还可以访问A's 的初始化程序。
如果A有另一个private属性,那么它的初始化程序将再次变为private:
private struct A {
let string: String
private let int: Int
// default initializer: private init(string: String, int: Int)
func foo() {}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9435 次 |
| 最近记录: |