swift 属性声明关键字

作者: 悟_空 | 来源:发表于2019-04-22 12:15 被阅读40次

关于 swift 中的open ,public ,fileprivate,private, internal的区别 以下按照修饰关键字的访问约束范围 从约束的限定范围小到大的排序进行说明。

1,private:声明为私有的实体只能在其声明的范围内被访问。

这个修饰约束性比fileprivate的约束性更大,private 作用于某个类,也就是说,对于 class A ,如果属性a是private的,那么除了A外其他地方都不能访问了(fileprivate 和private都是一种对某个类的限制性约束。fileprivate的适用场景可以是某个文件下的extension,如果你的类中的变量定义成了private那么这个变量在你这个类在这个类的文件的拓展中就无法访问了,这时就需要定义为fileprivate)。

2,fileprivate: 文件内私有,超出当前文件不能访问。也就是说在当前文件内(.swift)声明的其他类也能访问到该属性。

这个修饰跟名字的含义很像,file private 就是文件之间是private的关系,也就是在同一个source文件中还是可以访问的,但是在其他文件中就不可以访问了  a belong to file A, a not belong to file B , 在 file A 中 可以访问 a,在 file B不可以访问a

3,internal:默认访问级别,internal可以不写,整个模块都可以访问。

在模块内部可以访问,在模块外部不可以访问,a belong A , B import A, A 可以访问 a, B 不可以访问a.比如你写了一个sdk。那么这个sdk中有些东西你是不希望外界去访问他,这时候你就需要internal这个关键字(我在导入第三方框架时发现其实没有定义的话sdk里面是默认internal的)。

4,public:使用public修饰的类,属性或方法,可以被任何类访问,但在其他的module中不可以被重写和继承,而在被module可以。

module内和module外的区别:module内是指不需要使用import引用文件,就可以创建对象,表示module内,而module外是指需要使用import文件才能创建对象才能使用。

类用public(或级别更加等级更低的约束(如private等))修饰后只能在本模块(sdk)中被继承,如果public是修饰属性的话也是只能够被这个module(sdk)中的子类重写。

5,open: 可以被任何人使用,也可以被重写和继承,这是和public的区别。

用open修饰的类可以在本某块(sdk),或者其他引入本模块的(sdk,module)继承,如果是修饰属性的话可以被此模块或引入了此某块(sdk)的模块(sdk)所重写。

open,public 对应的级别是该模块或者是引用了该模块的模块可以访问 即 a belong to A , B import A 这两种情况都可以对 a进行访问。

6,最后是 Guiding Principle of Access Levels (访问级别的推导原则):不能在低级别的修饰中定义比自身更高的级别修饰,如public不能用于修饰private类中的属性。

相关文章

  • swift 属性声明关键字

    关于 swift 中的open ,public ,fileprivate,private, internal的区别...

  • swift 属性声明关键字

    private 声明为私有的实体只能在其声明的范围内被访问。 fileprivate 文件内私有,超出当前文件不能...

  • Swift语法备忘录4-Objects and Classes

    Swift Tour 声明类 使用关键字class声明一个类,除非在类的上下文里,属性的声明也跟恒量或者变量一样。...

  • Swift: lazy 属性的写法

    序言:OC中有懒加载,Swift中用lazy关键字声明属性,也可以实现懒加载。lazy所修饰的属性只有第一次访问时...

  • Kotlin:可变或者不可变的属性的使用

    一、声明属性 Kotlin类可以有属性,属性可以用关键字var声明为可变的,否则使用只读关键字val; 使用属性,...

  • 3. Kotlin属性与字段

    属性与字段 声明属性 属性既可以使用关键字var声明为可变的,也可以用关键字val声明为只读的。 Getters和...

  • Kotlin-属性与字段

    属性 声明属性 Kotlin 类中的属性既可以用关键字 var 声明为可变的,也可以用关键字 val 声明为只读的...

  • Java - Day6

    static关键字 1, 使用static声明属性 static声明全局属性 2, 使用static声明方法 ...

  • kotlin属性与字段

    借鉴kotlin中文站 声明属性 Kotlin类中声明属性,即可用关键字var声明成可变的,又可以用关键字val声...

  • iOS9新特性之常见关键字

    苹果为什么要推出关键字? 迎合swift,swift强语言,OC弱语言,swift必须描述属性有没有值 关键字注意...

网友评论

    本文标题:swift 属性声明关键字

    本文链接:https://www.haomeiwen.com/subject/qbtygqtx.html