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)
依次为open,public,internal,fileprivate,private。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容