struct中的私有静态变量

时间:2014-12-30 22:54:06

标签: swift

在这个示例中,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()

3 个答案:

答案 0 :(得分:2)

private访问修饰符使声明对文件是私有的,而不是对类或结构进行声明。这听起来有点奇怪,我知道,但它是如何在swift中实现的。

其他2个访问修饰符是:

  • internal:仅在当前模块中可访问
  • public:可从任何地方访问

建议阅读:Access Control

答案 1 :(得分:1)

私有关键字表示该变量只能在同一个文件中 进行访问。

您正在同一个文件中访问该属性,这就是它工作的原因。尝试从不同的文件中执行此操作,您将看到它无法访问。

答案 2 :(得分:0)

从Swift 3开始,示例代码不再编译。添加了一个名为fileprivate的新修饰符,它以private以前的工作方式起作用(即,同一文件中的任何其他内容都可以看到它)。

private在Swift 3和4中的工作方式现在更加像您期望的那样-在Swift 3中,它只能在声明的上下文中访问,而在Swift 4中,也可以从以下位置访问该类型的扩展名(但仅限于它们在同一文件中)。

相关问题