Swift 4 Access Control(访问控制)Open, Public, Internal, Fileprivate, Private

Access control restricts access to parts of your code from code in other source files and modules. This feature enables you to hide the implementation details of your code, and to specify a preferred interface through which that code can be accessed and used.

访问权限(least -> most restrictive)

1. Open Public (最宽松)

open 可以被其他 module 引用

//module 1

public func A(){}
open func B(){}

//module 2

override func A(){} // error
override func B(){} // success

2. Internal(默认)

Swift 默认的属性和方法在同一个 module 中都可以访问。
但如果是框架或库代码,即使 import 对应的头文件,仍然是不可以引用。
我们在UIKit module 中定义了一个方法

internal func internalMethod() {
 print("I am inside UIKit")

即使引用了 UIKit,仍然是无法调用该方法的,只能在UIKit内部使用。

3. Fileprivate Private

fileprivate 在当前文件中都可以访问。
private 区分一下 Swift 版本:
Swift 3 中只能在当前类里面访问,在当前类的extension中都是不可以访问的。
Swift 4 中可以在当前类的 extension 中访问了。
但是 fileprivate 和 private 还是有区别的,如下:

class A: NSObject {
    private var isPrivate: Bool?
    fileprivate var isFileprivate: Bool?
class B: NSObject {
    func SomeFunction() {
        let a = A()
        a.isFileprivate = true
        a.isPrivate = true // 'isPrivate' is inaccessible due to 'private' protection level

这是在同一个文件内,fileprivate 是可以正常访问。
但是类不同,所以 private 是不能访问的。

以上就是目前版本 Swift 4.0 访问控制内容的简单整理。

ღ( ´・ᴗ・` )比心

Source:Swift-Access Control