浅谈Swift3.0中的访问控制

前言

学习过 Java 等面向对象语言的同学对访问控制一定不陌生,Swift 3.0 相较于之前的版本,新加了两个关于访问控制修饰符,open和fileprivate。对这五个关键字的 基本用法进行下简单总结,因为是个人理解,如有误,欢迎大家指正。

demo

访问控制修饰符的限制性 低(限制最多)->高(限制最少)排序为下:

private->fileprivate->internal(默认)->public->open

访问控制的使用原则: 不允许将实体定义在限制性更高(限制少)的实体内。所以,以下代码均为错误用法,并注明了错误信息:

classCat:NSObject{
    var name:String?
}
public var cat =Cat()
// Error: Variable cannot be declared public because its type 'Cat' uses an internal type
// public 变量不能为 internal,fileprivate,private 类型

public func testAccessControl(_ cat: Cat){
     return cat
}
// Error: Function cannot be declared public because its parameter uses an internal type
// 函数或方法的访问限制级别不能高于其参数类型

public func testAccessControl()->Cat{
     return Cat()
}
// Error: Function cannot be declared public because its result uses an internal type
// 函数或方法的访问限制级别不能高于其返回值类型

open & public

open 是 Swift 3.0 新增的访问控制符,相较于 public 更加开放。 open 和 public 都是可以跨 Module 访问的,但 open 修饰的类可以继承,修饰的方法可以 override(此时, open 需同时修饰该方法以及所在类),而 public 不可以。

至于 public final 与 public ,前者在任何地方均不可重写,而后者可在本 Module 内重写。

fileprivate & private

Swift 3.0 新增的另一个访问修饰符是 fileprivate 。 原来的private变成了fileprivate,而private变为了真正的私有访问控制。这意味着离开这个类或者结构体的作用域外面就无法访问。

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

相关阅读更多精彩内容

  • 136.泛型 泛型代码让你可以写出灵活,可重用的函数和类型,它们可以使用任何类型,受你定义的需求的约束。你可以写出...
    无沣阅读 1,658评论 0 4
  • 由于种种原因,简书等第三方平台博客不再保证能够同步更新,欢迎移步 GitHub:https://github.co...
    萌面大道阅读 9,546评论 3 7
  • 20年前的1997年,此前两年拍摄的《大话西游》开始风靡全国,经久不衰。当年35岁风华正茂的周星驰如今55岁了,然...
    红图伟业阅读 838评论 0 1
  • 目前已经用过的技术: 技术类原生javascriptsocket //长链接react (vue?angula...
    SeaseeYoul阅读 373评论 0 4

友情链接更多精彩内容