Swift 為代碼中的實(shí)體提供了五種不同的訪問級別粗井。這些訪問級別不僅與源文件中定義的實(shí)體相關(guān),同時(shí)也與源文件所屬的模塊相關(guān)街图。
- Open 和 Public 級別可以讓實(shí)體被同一模塊源文件中的所有實(shí)體訪問浇衬,在模塊外也可以通過導(dǎo)入該模塊來訪問源文件里的所有實(shí)體。通常情況下餐济,你會(huì)使用 Open 或 Public 級別來指定框架的外部接口耘擂。Open 和 Public 的區(qū)別在后面會(huì)提到。
- Internal 級別讓實(shí)體被同一模塊源文件中的任何實(shí)體訪問絮姆,但是不能被模塊外的實(shí)體訪問醉冤。通常情況下,如果某個(gè)接口只在應(yīng)用程序或框架內(nèi)部使用滚朵,就可以將其設(shè)置為 Internal 級別冤灾。
- File-private 限制實(shí)體只能在其定義的文件內(nèi)部訪問。如果功能的部分細(xì)節(jié)只需要在文件內(nèi)使用時(shí)辕近,可以使用 File-private 來將其隱藏韵吨。
- Private 限制實(shí)體只能在其定義的作用域,以及同一文件內(nèi)的 extension 訪問移宅。如果功能的部分細(xì)節(jié)只需要在當(dāng)前作用域內(nèi)使用時(shí)归粉,可以使用 Private 來將其隱藏。
Open 只能作用于類和類的成員漏峰,它和 Public 的區(qū)別如下: - Public 或者其它更嚴(yán)訪問級別的類糠悼,只能在其定義的模塊內(nèi)部被繼承。
- Public 或者其它更嚴(yán)訪問級別的類成員浅乔,只能在其定義的模塊內(nèi)部的子類中重寫倔喂。
- Open 的類铝条,可以在其定義的模塊中被繼承,也可以在引用它的模塊中被繼承席噩。
- Open 的類成員班缰,可以在其定義的模塊中子類中重寫,也可以在引用它的模塊中的子類重寫悼枢。