权限关键字
private :
- 修饰的属性、方法只能在当前 类 中使用
当调用不在当前类中,即使是当前类相关对象也不能使用 - 修饰的Class或Struct 除在自身内部使用;其它的都不被允许(包括类的继承和实例化),因此一般开发中不会用private 修饰Class 和Struct
- private 修饰的protocol,只允许在当前文件中遵循该protocol
其它的都是不被允许的(包括类型申明, 函数或方法中的形参申明)
filePrivate:
- 修饰的属性、方法,只能在当前文件中使用
当前文件内, 可以跨类调用 - 修饰Class或Struct,Class在当前文件内可以实例化和继承使用,在当前文件之外的任何地方都不允许被使用
- fileprivate 修饰的protocol,同private修饰protocol 效果一致, 都是只允许在当前文件中遵循, 不允许类型申明使用, 函数和方法的形参声明
internal:
默认权限修饰关键字, 一般不用声明, 只允许在当前module中使用,继承, 重写
public:
- 修饰的属性, Struct和protocol,允许跨module 使用
- 修饰的Class,允许跨module使用,但不允许跨module继承
- 修饰的方法, 允许跨module使用; 但是不允许跨module重写,即使是该方法的类是采用open修饰
open:
- open 修饰的属性,跟public一致, 因为存储型属性不予许重写
- open 不允许修饰protocol,Struct,Struct方法, 是因为open修饰的,表示可重载
- 修饰方法, 允许跨module调用和重写
- 修饰class,允许跨module使用和继承
权限从小到大的排序为 private < fileprivate < internal < public < open
mutating:
用于修饰结构体的实例方法中,进行修改结构体属性值
@escaping:
用于修饰闭包,防止闭包在方法或者函数返回时销毁,叫做允许闭包逃逸
网友评论