浅谈Swift3.0中的访问控制

2016-11-03  本文已影响0人  gouyz

前言

学习过 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变为了真正的私有访问控制。这意味着离开这个类或者结构体的作用域外面就无法访问。

上一篇 下一篇

猜你喜欢

热点阅读