在swift3.0之前的版本中有3中訪問關鍵字,分別爲private、internal和public。而在最新的swift3.0中新增了fileprivate和open。接下來咱們將詳細介紹這兩個關鍵字。html
fileprivate 其實就是過去的 private。其修飾的屬性或者方法只能在當前的 Swift 源文件裏能夠訪問。即在同一個文件中,全部的 fileprivate 方法屬性都是能夠訪問到的。swift
class A { fileprivate func test(){ print("this is fileprivate func!") } } class B:A { func show(){ test() } }
而private如今變爲了真正的私有訪問控制。就是說無論在不在同一個文件中,用private修飾的方法也不能夠被代碼域以外的地方訪問。安全
class A { private func printA(){ print("A") } } class B:A { func printB(){ printA() } }
上面的實例是咱們使用private方法定義一個父類A的成員方法,可是當繼承該類的子類調用該方法時將會出現以下圖的報錯:ide
open其實就是過去的public,過去public有兩個做用:性能
但這樣就會有問題,爲了安全,咱們可能但願某個類或屬性可以被外部訪問,但又不想其被繼承或修改。若是將其標記成final後又會形成任何地方都不能被override。好比對lib設計者來講,他但願的結果是在module內能夠被override,而被import 到外部後不能被override。 如今新添加的open起的就是原來public的做用。而如今的public表示在其餘module中不能夠被override和繼承,而在module內能夠被 override和繼承。this
從高到低排序以下:設計
open> public > interal > fileprivate > privatecode