在SWIFT 3中区分fileprivate和私有的一个好例子是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我的问题是 - 没有使用fileprivate一个函数,只会在这个文件中使用和使用相同的函数private

提问于
用户回答回答于

fileprivate现在是private以前的Swift版本中的版本:可以从同一个源文件访问。private现在标记为的声明只能在声明的词法范围内进行访问,所以private比起声明更具限制性fileprivate

Swift 4开始,如果扩展是在同一个源文件中定义的,那么类型中的私有声明可以被相同类型的扩展访问。

示例(全部在一个源文件中):

class A {
    private func foo() {}
    fileprivate func bar() {}

    func baz() {
        foo()
        bar()
    }
}

extension A {
    func test() {
        foo() // Swift 3: error: use of unresolved identifier 'foo'
              // Swift 4: no error because extension is in same source file
        bar()
    }
}

let a = A()
a.foo() // error: 'foo' is inaccessible due to 'private' protection level
a.bar()
  • 私有foo方法只能在class A { ... }定义的范围内访问。甚至不能从扩展类型中访问(在Swift 3中,请参阅下面关于Swift 4中变化的第二个注释)。
  • 文件私有bar方法可以从同一个源文件访问。
用户回答回答于

扫码关注云+社区