在这个示例中,getInstance是公共的,因此可以访问,但私有变量也可以访问,为什么?
public class SingleObject {
public struct Static {
private static var object: SingleObject?
public static func getObject() -> SingleObject {
if (object == nil) {
object = SingleObject()
}
return object!
}
}
}
SingleObject.Static.object //why private is accessible here?
SingleObject.Static.getObject()
答案 0 :(得分:2)
private
访问修饰符使声明对文件是私有的,而不是对类或结构进行声明。这听起来有点奇怪,我知道,但它是如何在swift中实现的。
其他2个访问修饰符是:
建议阅读:Access Control
答案 1 :(得分:1)
私有关键字表示该变量只能在同一个文件中 进行访问。
您正在同一个文件中访问该属性,这就是它工作的原因。尝试从不同的文件中执行此操作,您将看到它无法访问。
答案 2 :(得分:0)
从Swift 3开始,示例代码不再编译。添加了一个名为fileprivate
的新修饰符,它以private
以前的工作方式起作用(即,同一文件中的任何其他内容都可以看到它)。
private
在Swift 3和4中的工作方式现在更加像您期望的那样-在Swift 3中,它只能在声明的上下文中访问,而在Swift 4中,也可以从以下位置访问该类型的扩展名(但仅限于它们在同一文件中)。