2019-05-30 17:25:45 watertekhqx 阅读数 363

swift 中关于open ,public ,internal,fileprivate,private 修饰的说明

open:

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

public:

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

internal

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

fileprivate

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

private

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

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

2017-09-18 17:43:44 sun_cui_hua 阅读数 8345

在Swift3.0中,访问修饰符有五种,分别为open,public,internal,fileprivate,private。
其中 fileprivate和open是Swift 3.0新添加的。由于过去 Swift对于访问权限的控制,不是基于类的,而是基于文件的。这样会有问题,所以Swift 3新增了两个修饰符对原来的private、public进行细分。

1、private
private访问级别所修饰的属性或者方法只能在当前类里访问。

2、fileprivate
fileprivate访问级别所修饰的属性或者方法在当前的Swift源文件里可以访问。

3、internal(默认访问级别,internal修饰符可写可不写)
internal访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问。
如果是框架或者库代码,则在整个框架内部都可以访问,框架由外部代码所引用时,则不可以访问。
如果是App代码,也是在整个App代码,也是在整个App内部可以访问。

4、public
可以被任何人访问。但其他module中不可以被override和继承,而在module内可以被override和继承。

5,open
可以被任何人使用,包括override和继承。

访问顺序:
现在的访问权限则依次为:open,public,internal,fileprivate,private。

swift语言的设计目标之一就是一门安全的语言(“Designed for Safety”)就能理解这次的改动。更加明确清晰的访问权限控制可以使程序员表达出更准确的意图,当然也迫使在编码时思考的更加深入。

2018-03-22 15:43:48 weiwandaixu_ 阅读数 97

private :只在当前类中调用 ,不能在extension中调用

fileprivate:可以在当前类中调用 ,在extension和类是在同一个源文件中 也可以在extension中调用

Internal: , 为默认访问级别, 允许实体被定义模块中的任意源文件访问,但不能被该模块之外的任何源文件访问。通常在定义应用程序或是框架的内部结构时使用。

public: 可以在其他作用域中调用 但不能在override中访问,其子类的extension也不能调用

open: 可以在其他作用域中调用 其他作用域被继承或重载 override都可以调用

final:在关键字class 前添加 final (修饰符) 可以将整个类标为 final ,这个样的类不可以被继承,视图继承这样的类会编译报错

在类的定义中将方法、属性、下标脚本标记为 final 可以防止它们被重写。

2018-02-09 14:54:36 ZY_FlyWay 阅读数 1606

Swift 4.0访问权限关键字

    目前有 open  public  internal  fileprivate  private 这五个访问权限,都可以修饰属性和方法。下面通过例子来分析五个访问权限的使用。


不同点分析:

  • 是否可以被子类继承访问
  • 同文件不同类下是否可以访问
  • 不同文件是否可以被访问
  • 不同组件下是否可以被访问

1、private

被private修饰的属性和方法  ,只可以在该类下使用(extension可使用,因为是同类。)

例如:下面图片,即使在同文件下不同类也是不能调用的,继承的话子类也不能调用。



2、fileprivate

      fileprivate和private 想比较一下,区别一目了然,相同文件下是可以调用的,其他和private一样。

 

3、internal 

 

      默认权限,如果项目没有进行组件化开发,整个APP项目内都是可以访问的。

 

4、public

 可以被任何人访问,但是在其他module中不可以被继承和重写,在当前module内可以


5、open  


  最高权限,可以被任何module和文件访问和继承重写


swift
2014-07-10 13:16:00 u014011954 阅读数 302
http://www.swift-open.com/  swift开发者 论坛
没有更多推荐了,返回首页