欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Swift學(xué)習(xí)教程之訪問(wèn)控制詳解

 更新時(shí)間:2017年08月13日 14:47:36   作者:Mellong  
訪問(wèn)控制可以限定你在源文件或模塊中訪問(wèn)代碼的級(jí)別,也就是說(shuō)可以控制哪些代碼你可以訪問(wèn),哪些代碼你不能訪問(wèn)。下面這篇文章主要給大家介紹了關(guān)于Swift學(xué)習(xí)教程之訪問(wèn)控制的相關(guān)資料,需要的朋友可以參考下。

前言

本文主要給大家介紹了關(guān)于Swift訪問(wèn)控制的相關(guān)內(nèi)容,訪問(wèn)控制對(duì)訪問(wèn)你的其他代碼源文件和模塊部分進(jìn)行了約束。這個(gè)特性允許你隱藏你的代碼實(shí)現(xiàn),并且指定通過(guò)其可以訪問(wèn)和使用該代碼的優(yōu)選接口。

class,structure 和 enumeration 都可以指定訪問(wèn)級(jí)別,當(dāng)然,property,method,initializer 和 屬于這里類型的 subscript。protocol 可以限制到某個(gè)上下文,全局變量,變量和函數(shù)也可以。

另外,Swift 也提供默認(rèn)的使用級(jí)別給典型的使用場(chǎng)景。確實(shí),如果你編寫(xiě)一款單一目標(biāo)的 app,你可能根本不需要明確地指定訪問(wèn)控制級(jí)別。

模塊和源文件

Swift的訪問(wèn)控制模型是基于模塊和源文件的概念。

一個(gè)模塊是單個(gè)的代碼分布單元————一個(gè) framework 或者應(yīng)用程序是作為單個(gè)單元編譯和傳遞的,他們能夠通過(guò) Swift 的 import 關(guān)鍵字被其他模塊導(dǎo)入。

在Swift 中, Xcode的每一個(gè) build target(如 一個(gè) app bundle 或者 framework)被當(dāng)成一個(gè)單獨(dú)的模塊。

雖然通常做法是在不同的源文件定義不同的類型,然而一個(gè)源文件事實(shí)上可以包含不同的類型,函數(shù)等的定義。

訪問(wèn)級(jí)別

Swift 為你的代碼實(shí)體提供5個(gè)不同的訪問(wèn)級(jí)別:

  • Open 訪問(wèn)和 public 訪問(wèn)允許實(shí)體能夠被使用在任何來(lái)自起決定作用的模塊的源文件,或者來(lái)自于其他被導(dǎo)入的模塊的源文件。通常使用 open 或者 public 來(lái)指定framework 的公開(kāi)接口。兩者的不同點(diǎn)將在下面進(jìn)行描述。
  • Internal 訪問(wèn)允許實(shí)體被使用在他們定義模型的任何源文件里面,但是不能在模塊外部的任何源文件使用。通常在定義一個(gè) app 或者一個(gè) framework 的內(nèi)部結(jié)構(gòu)的時(shí)候使用 internal 訪問(wèn)。
  • File-private 訪問(wèn)限制了在定義源文件中實(shí)體的使用。使用 file-private 訪問(wèn)來(lái)隱藏特定功能的實(shí)現(xiàn)細(xì)節(jié),當(dāng)這些細(xì)節(jié)在整個(gè)文件中使用的時(shí)候。
  • Private 訪問(wèn)將實(shí)體的使用限制在封閉聲明中。使用 private 訪問(wèn)來(lái)隱藏特定功能的實(shí)現(xiàn)細(xì)節(jié),當(dāng)這些細(xì)節(jié)在單個(gè)聲明使用時(shí)。

Open 訪問(wèn)是最高訪問(wèn)級(jí)別,private 是最低訪問(wèn)級(jí)別(最大限制性)。

Open 訪問(wèn)只用在類和類成員,他和 publick 訪問(wèn)的區(qū)別如下:

  • 使用 public 訪問(wèn)的類, 或者其他更多限制性的訪問(wèn)級(jí)別,只能在定義的模塊內(nèi)創(chuàng)建子類。
  • 使用 public 訪問(wèn)的類成員,或者其他更多限制性的訪問(wèn)級(jí)別,只能在定義的模塊內(nèi)被其子類重寫(xiě)。
  • Open 類可以被定義的模塊或者其他 import 該模塊的地方創(chuàng)建子類。
  • Open 類成員可以被定義的模塊或者其他 import 該模塊的地方創(chuàng)建的子類重寫(xiě)。

簡(jiǎn)單來(lái)說(shuō)就是 public 和 open 的區(qū)別就是public 比 open 少了模塊外的類繼承和類成員重寫(xiě)的權(quán)限。

訪問(wèn)級(jí)別的指導(dǎo)原則

在 Swift 中,訪問(wèn)級(jí)別遵從總的指導(dǎo)原則是:沒(méi)有實(shí)體可以被定義在另外一個(gè)擁有較低訪問(wèn)級(jí)別(更多限制)的實(shí)體之內(nèi)。

例如:

  • public變量不能被定義為具有internal, file-private或者 private 類型,因?yàn)檫@種類型可能不能用在使用公共變量的任何地方。
  • 函數(shù)不能具有比其他參數(shù)類型和返回類型更高的訪問(wèn)級(jí)別,因?yàn)樵摵瘮?shù)可以在其組成類型不可被周?chē)a使用的情況下使用。

下面會(huì)有更詳細(xì)的介紹。

默認(rèn)的訪問(wèn)級(jí)別

如果你自己沒(méi)有指定一個(gè)明確的訪問(wèn)級(jí)別,所有代碼中的實(shí)體都有一個(gè)默認(rèn)的internal訪問(wèn)級(jí)別。結(jié)果,在很多情況下你不需要對(duì)你的代碼指定明確的訪問(wèn)級(jí)別。

單目標(biāo)應(yīng)用程序的訪問(wèn)級(jí)別

如果你寫(xiě)的是一個(gè) i 簡(jiǎn)單的單目標(biāo)應(yīng)該程序,那么你的程序代碼就是典型的自包含程序,并不需要在程序模塊的外部進(jìn)行使用。默認(rèn)的訪問(wèn)級(jí)別 internal 已經(jīng)滿足這個(gè)需求。因此,你不需要去指定一個(gè)訪問(wèn)級(jí)別。然而,你可能需要把你部分的代碼標(biāo)記為文件私有或者私有,從而使得在程序模塊中的其他代碼隱藏他們的實(shí)現(xiàn)細(xì)節(jié)。

Frameworks 的訪問(wèn)級(jí)別

當(dāng)你開(kāi)發(fā)一個(gè) framework,標(biāo)記 open 或者 public 以便它能夠被其他模塊訪問(wèn)到,例如某個(gè)程序引入這個(gè) framework 的時(shí)候。這個(gè)面向公眾的接口是framework 的程序編程接口(或者 API)。

值得注意的是:任何 framework 的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)都還可以使用默認(rèn)的內(nèi)部訪問(wèn)級(jí)別,或者可以標(biāo)識(shí)為私有或者文件私有級(jí)別,如果你想對(duì)framework 的其他部分內(nèi)部代碼隱藏他們的話。只有當(dāng)你想讓一個(gè)實(shí)體成為你的 framework 的 API 的一部分的話,那么你就需要把這個(gè)實(shí)體標(biāo)識(shí)為 open 或者 public。

單元測(cè)試目標(biāo)的訪問(wèn)級(jí)別

當(dāng)你寫(xiě)的是一個(gè)包含單元測(cè)試目標(biāo)的程序時(shí),那么你需要讓你程序中的代碼可以被測(cè)試模塊使用到以便于測(cè)試。一般情況下,只有被標(biāo)識(shí)為 open 或者 public 的實(shí)體才可以被其他模塊訪問(wèn)到。然而,如果你把產(chǎn)品的模塊 import 聲明前加入 @testable 屬性并且在打開(kāi)測(cè)試選項(xiàng)下編譯產(chǎn)品模塊的話,那么單元測(cè)試目標(biāo)就能夠訪問(wèn)任何的 internal 實(shí)體。

訪問(wèn)級(jí)別語(yǔ)法

為實(shí)體定義訪問(wèn)級(jí)別:

public class SomePublicClass {}
internal class SomeInternalClass {}
fileprivate class SomeFilePrivateClass {}
private class SomePrivateClass {}
 
public var somePublicVariable = 0
internal let someInternalConstant = 0
fileprivate func someFilePrivateFunction() {}
private func somePrivateFunction() {}

除非有其他的指定,否則的話默認(rèn)的訪問(wèn)基本是 internal,這也就意味著 SomeInternalClass 和 someInternalConstant 能夠在不明確訪問(wèn)級(jí)別修飾符的情況下也還擁有 internal 的訪問(wèn)級(jí)別:

class SomeInternalClass {}    // 隱式 internal
let someInternalConstant = 0   // 隱式 internal

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

翻譯自:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html#//apple_ref/doc/uid/TP40014097-CH41-ID3

相關(guān)文章

  • Swift 3.0將UILabel數(shù)字顏色設(shè)置為紅色的方法

    Swift 3.0將UILabel數(shù)字顏色設(shè)置為紅色的方法

    這篇文章主要介紹了關(guān)于在Swift中將UILabel數(shù)字顏色設(shè)置為紅色的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • Swift教程之類的析構(gòu)詳解

    Swift教程之類的析構(gòu)詳解

    這篇文章主要介紹了Swift教程之類的析構(gòu)詳解,在一個(gè)類的實(shí)例被釋放之前,析構(gòu)函數(shù)會(huì)被調(diào)用,本文即講解了析構(gòu)過(guò)程原理、析構(gòu)器操作等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Swift3.0剪切板代碼拷貝及跨應(yīng)用粘貼實(shí)現(xiàn)代碼

    Swift3.0剪切板代碼拷貝及跨應(yīng)用粘貼實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了Swift3.0剪切板代碼拷貝及跨應(yīng)用粘貼的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Swift項(xiàng)目中利用SWRevealViewController實(shí)現(xiàn)側(cè)滑菜單

    Swift項(xiàng)目中利用SWRevealViewController實(shí)現(xiàn)側(cè)滑菜單

    這篇文章主要介紹了Swift項(xiàng)目中利用SWRevealViewController實(shí)現(xiàn)側(cè)滑菜單,需要的朋友可以參考下
    2015-12-12
  • swift中defer幾個(gè)簡(jiǎn)單的使用場(chǎng)景詳解

    swift中defer幾個(gè)簡(jiǎn)單的使用場(chǎng)景詳解

    在Swift 2.0中,Apple提供了defer關(guān)鍵字,讓我們可以實(shí)現(xiàn)同樣的效果,這篇文章主要介紹了關(guān)于swift中defer幾個(gè)簡(jiǎn)單的使用場(chǎng)景的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用defer具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧。
    2018-03-03
  • 如何利用SwiftUI實(shí)現(xiàn)可縮放的圖片預(yù)覽器

    如何利用SwiftUI實(shí)現(xiàn)可縮放的圖片預(yù)覽器

    這篇文章主要給大家介紹了關(guān)于如何利用SwiftUI實(shí)現(xiàn)可縮放圖片預(yù)覽器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SwiftUI具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Swift網(wǎng)絡(luò)請(qǐng)求庫(kù)Alamofire使用詳解

    Swift網(wǎng)絡(luò)請(qǐng)求庫(kù)Alamofire使用詳解

    這篇文章主要為大家詳細(xì)介紹了Swift網(wǎng)絡(luò)請(qǐng)求庫(kù)Alamofire的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Swift中的訪問(wèn)控制和protected

    Swift中的訪問(wèn)控制和protected

    這篇文章主要介紹了Swift中的訪問(wèn)控制和protected,本文主要講解為什么Swift沒(méi)有類似protected的選項(xiàng),需要的朋友可以參考下
    2015-05-05
  • swift如何利用系統(tǒng)庫(kù)將漢字轉(zhuǎn)換為拼音詳解

    swift如何利用系統(tǒng)庫(kù)將漢字轉(zhuǎn)換為拼音詳解

    將漢字轉(zhuǎn)換為拼音更利于我們大家開(kāi)發(fā)搜索功能,所以這篇文章主要給大家介紹了關(guān)于swift如何利用系統(tǒng)庫(kù)將漢字轉(zhuǎn)換為拼音的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-10-10
  • 倉(cāng)庫(kù)模式及其在Swift?項(xiàng)目中的應(yīng)用詳解

    倉(cāng)庫(kù)模式及其在Swift?項(xiàng)目中的應(yīng)用詳解

    這篇文章主要為大家介紹了倉(cāng)庫(kù)模式及其在Swift?項(xiàng)目中的應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論