Swift 3中新的访问控制关键字fileprivate和open
2016-09-23 09:54
197 查看
在Swift 3中除去原有的3个访问控制关键字private,public,internal,又添加了2个关键字fileprivate和open
它们可以看成是对private和public的进一步细分
原来的private对于同一个文件的各个方法来说都可以访问到,这往往不是开发者想要的结果,于是原来的private变成了fileprivate,而private变为了真正的私有访问控制.这意味着即使在同一个文件中用private修饰的方法也不可以被代码域之外所访问了:
如果把上述代码中的private换为fileprivate那么一切照旧,错误就会消失.
而对于open来说是补充public语义上的缺陷.以往的public有2层含义:
1.该item可以在其他作用域被访问
2.给item可以在其他作用域被继承或重载override
而后一种含义从某种意义上说是一件危险的行为,你往往不希望某个类或属性被继承或修改,这就是传统意义上的final
但是被final标记后在任何地方都不能被override,对于lib设计者来说希望的结果是在module内可以被override,而在import到外部后不能被override
这就是open产生的原因,现在的public表示在其他module中不可以被override和继承,而open表示原来public的含义.
现在的访问权限由高到低依次为:open,public,interal,fileprivate,private
参考精彩的博文:Swift 3必看:新的访问控制fileprivate和open
它们可以看成是对private和public的进一步细分
原来的private对于同一个文件的各个方法来说都可以访问到,这往往不是开发者想要的结果,于是原来的private变成了fileprivate,而private变为了真正的私有访问控制.这意味着即使在同一个文件中用private修饰的方法也不可以被代码域之外所访问了:
class Foo{ private func test(){ print("hello private func!!!") } func show(){ test() } } class Sub:Foo{ func show_sub(){ test() //ERROR!!! } } Foo().show()
如果把上述代码中的private换为fileprivate那么一切照旧,错误就会消失.
而对于open来说是补充public语义上的缺陷.以往的public有2层含义:
1.该item可以在其他作用域被访问
2.给item可以在其他作用域被继承或重载override
而后一种含义从某种意义上说是一件危险的行为,你往往不希望某个类或属性被继承或修改,这就是传统意义上的final
但是被final标记后在任何地方都不能被override,对于lib设计者来说希望的结果是在module内可以被override,而在import到外部后不能被override
这就是open产生的原因,现在的public表示在其他module中不可以被override和继承,而open表示原来public的含义.
现在的访问权限由高到低依次为:open,public,interal,fileprivate,private
参考精彩的博文:Swift 3必看:新的访问控制fileprivate和open
相关文章推荐
- Apple Swift学习教程
- 介绍 Fedora 上的 Swift
- 比较详细的ASP rs.open语句详细说明
- php错误提示failed to open stream: HTTP request failed!的完美解决方法
- Javascript中封装window.open解决不兼容问题
- mysql Event Scheduler: Failed to open table mysql.event
- Locate a File Using a File Open Dialog Box
- 剖析 rudy 访问控制
- Can’t open file:'[Table]mytable.MYI'
- window.open()详解及浏览器兼容性问题示例探讨
- js中window.open打开一个新的页面
- window.open关于浏览器拦截问题分析及解决方法
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
- Swift自定义iOS中的TabBarController并为其添加动画
- Swift编程中的泛型解析
- Swift中定义二维数组的方法及遍历方法示例
- Swift实现Selection Sort选择排序算法的实例讲解
- C++编程中私有和保护以及公有的类成员访问控制
- MYSQL错误:Can’t open file: ‘×××.MYI’ (errno: 145)修复方法