亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

Swift學習教程之訪問控制詳解

2020-03-09 17:44:45
字體:
來源:轉載
供稿:網友

前言

本文主要給大家介紹了關于Swift訪問控制的相關內容,訪問控制對訪問你的其他代碼源文件和模塊部分進行了約束。這個特性允許你隱藏你的代碼實現,并且指定通過其可以訪問和使用該代碼的優選接口。

class,structure 和 enumeration 都可以指定訪問級別,當然,property,method,initializer 和 屬于這里類型的 subscript。protocol 可以限制到某個上下文,全局變量,變量和函數也可以。

另外,Swift 也提供默認的使用級別給典型的使用場景。確實,如果你編寫一款單一目標的 app,你可能根本不需要明確地指定訪問控制級別。

模塊和源文件

Swift的訪問控制模型是基于模塊和源文件的概念。

一個模塊是單個的代碼分布單元————一個 framework 或者應用程序是作為單個單元編譯和傳遞的,他們能夠通過 Swift 的 import 關鍵字被其他模塊導入。

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

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

訪問級別

Swift 為你的代碼實體提供5個不同的訪問級別:

  • Open 訪問和 public 訪問允許實體能夠被使用在任何來自起決定作用的模塊的源文件,或者來自于其他被導入的模塊的源文件。通常使用 open 或者 public 來指定framework 的公開接口。兩者的不同點將在下面進行描述。
  • Internal 訪問允許實體被使用在他們定義模型的任何源文件里面,但是不能在模塊外部的任何源文件使用。通常在定義一個 app 或者一個 framework 的內部結構的時候使用 internal 訪問。
  • File-private 訪問限制了在定義源文件中實體的使用。使用 file-private 訪問來隱藏特定功能的實現細節,當這些細節在整個文件中使用的時候。
  • Private 訪問將實體的使用限制在封閉聲明中。使用 private 訪問來隱藏特定功能的實現細節,當這些細節在單個聲明使用時。

Open 訪問是最高訪問級別,private 是最低訪問級別(最大限制性)。

Open 訪問只用在類和類成員,他和 publick 訪問的區別如下:

  • 使用 public 訪問的類, 或者其他更多限制性的訪問級別,只能在定義的模塊內創建子類。
  • 使用 public 訪問的類成員,或者其他更多限制性的訪問級別,只能在定義的模塊內被其子類重寫。
  • Open 類可以被定義的模塊或者其他 import 該模塊的地方創建子類。
  • Open 類成員可以被定義的模塊或者其他 import 該模塊的地方創建的子類重寫。

簡單來說就是 public 和 open 的區別就是public 比 open 少了模塊外的類繼承和類成員重寫的權限。

訪問級別的指導原則

在 Swift 中,訪問級別遵從總的指導原則是:沒有實體可以被定義在另外一個擁有較低訪問級別(更多限制)的實體之內。

例如:

  • public變量不能被定義為具有internal, file-private或者 private 類型,因為這種類型可能不能用在使用公共變量的任何地方。
  • 函數不能具有比其他參數類型和返回類型更高的訪問級別,因為該函數可以在其組成類型不可被周圍代碼使用的情況下使用。

下面會有更詳細的介紹。

默認的訪問級別

如果你自己沒有指定一個明確的訪問級別,所有代碼中的實體都有一個默認的internal訪問級別。結果,在很多情況下你不需要對你的代碼指定明確的訪問級別。

單目標應用程序的訪問級別

如果你寫的是一個 i 簡單的單目標應該程序,那么你的程序代碼就是典型的自包含程序,并不需要在程序模塊的外部進行使用。默認的訪問級別 internal 已經滿足這個需求。因此,你不需要去指定一個訪問級別。然而,你可能需要把你部分的代碼標記為文件私有或者私有,從而使得在程序模塊中的其他代碼隱藏他們的實現細節。

Frameworks 的訪問級別

當你開發一個 framework,標記 open 或者 public 以便它能夠被其他模塊訪問到,例如某個程序引入這個 framework 的時候。這個面向公眾的接口是framework 的程序編程接口(或者 API)。

值得注意的是:任何 framework 的內部實現細節都還可以使用默認的內部訪問級別,或者可以標識為私有或者文件私有級別,如果你想對framework 的其他部分內部代碼隱藏他們的話。只有當你想讓一個實體成為你的 framework 的 API 的一部分的話,那么你就需要把這個實體標識為 open 或者 public。

單元測試目標的訪問級別

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

訪問級別語法

為實體定義訪問級別:

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

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。

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

 


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久91亚洲人成电影网站| 亚洲在线一区二区| 亚洲精品中文字幕av| 亚洲丁香婷深爱综合| 91精品视频在线看| 欧美天堂在线观看| 日韩免费av片在线观看| 久久久中精品2020中文| 国产福利视频一区二区| 日韩精品在线免费观看视频| 亚洲美女av网站| 欧美成人黑人xx视频免费观看| 国产精品高清免费在线观看| 亚洲精品一区二区三区婷婷月| 国产va免费精品高清在线观看| 久久亚洲春色中文字幕| 国产精品成人观看视频国产奇米| 91国内精品久久| 欧美日韩精品在线| 日本高清+成人网在线观看| 国产精品女视频| 亚洲激情视频在线播放| 国产精品27p| 亚洲新中文字幕| 主播福利视频一区| 亚洲精品国产精品国自产观看浪潮| 久久视频在线直播| 成人在线中文字幕| 色综合久久悠悠| 色中色综合影院手机版在线观看| 欧美在线一区二区视频| 欧美国产精品日韩| 久久国产精品亚洲| 国产va免费精品高清在线| 欧美国产视频一区二区| 日本精品va在线观看| 亚洲美女av黄| 亚洲一区免费网站| 国产亚洲精品综合一区91| 亚洲天堂视频在线观看| 亚洲激情视频网站| 欧美性生交xxxxx久久久| 亚洲网站在线观看| 91高潮在线观看| 国产精品一区二区av影院萌芽| 亚洲色图第三页| 久久成人精品视频| 欧美美最猛性xxxxxx| 成人国产精品色哟哟| 欧美成人精品一区二区三区| 亚洲国产成人精品久久| 福利微拍一区二区| 欧美亚洲另类制服自拍| 91影视免费在线观看| 日本一区二区在线免费播放| 92福利视频午夜1000合集在线观看| 国产噜噜噜噜噜久久久久久久久| 欧美亚洲另类在线| 91久久久久久久一区二区| 久久天天躁夜夜躁狠狠躁2022| 亚洲欧美一区二区三区久久| 97久久久久久| 欧美激情videoshd| 久精品免费视频| 国产婷婷97碰碰久久人人蜜臀| 最近的2019中文字幕免费一页| 91av视频在线播放| 亚洲男人天堂2024| 欧美福利小视频| 成人黄色av免费在线观看| 国产一区二区三区免费视频| 久久精品视频在线观看| 在线国产精品视频| 亚洲色图色老头| 日韩免费观看视频| 亚洲国产精品成人av| 欧美性69xxxx肥| 亚洲人成电影网站色www| 精品久久久久久久久久久久久久| 欧美激情喷水视频| 欧美亚洲午夜视频在线观看| 韩国三级日本三级少妇99| 国产精品免费一区二区三区都可以| 黑人巨大精品欧美一区二区免费| 欧美成人免费全部观看天天性色| 欧美丰满少妇xxxxx| 久久深夜福利免费观看| 色在人av网站天堂精品| 日本sm极度另类视频| 亚洲在线观看视频| 日韩精品视频三区| 亚洲一区二区三区xxx视频| 亚洲人成电影在线播放| 亚洲加勒比久久88色综合| 清纯唯美日韩制服另类| 欧美成人精品一区| 91九色视频在线| 欧美大人香蕉在线| 97婷婷大伊香蕉精品视频| 日韩中文字幕免费| 亚洲精品一区二区三区不| 亚洲精品久久7777777| 亚洲护士老师的毛茸茸最新章节| 日韩中文在线中文网在线观看| 久久久久久久一区二区| 日韩大片免费观看视频播放| 日韩美女视频免费在线观看| 视频在线观看一区二区| 午夜精品在线观看| 国产第一区电影| 亚洲国产成人在线播放| 国产丝袜一区二区三区| 最近2019中文字幕大全第二页| 亚洲国产欧美一区二区三区久久| 中文字幕视频一区二区在线有码| 91中文在线观看| 久久精品视频免费播放| 亚洲天堂网站在线观看视频| 欧美最猛性xxxx| 日韩久久免费视频| 成人免费xxxxx在线观看| 亚洲国产精品电影| 日韩大陆毛片av| 色在人av网站天堂精品| 欧美大成色www永久网站婷| 免费不卡欧美自拍视频| 欧美一级视频在线观看| 69久久夜色精品国产7777| 91色琪琪电影亚洲精品久久| 欧美成人精品影院| 日韩欧美国产网站| 日韩hd视频在线观看| 国产精品美女av| 久久精品福利视频| 欧美日韩成人精品| 亚洲а∨天堂久久精品9966| 亚洲国产日韩欧美在线图片| 欧美性猛交xxxx乱大交| 北条麻妃一区二区在线观看| 欧美乱大交xxxxx| 国内揄拍国内精品| 久久视频在线播放| 欧美日韩国产精品专区| 日韩精品视频在线观看免费| 91在线免费看网站| 91色精品视频在线| 国产午夜精品一区二区三区| 欧美久久久精品| 91社影院在线观看| 亚洲一区二区三区在线视频| 国产精品久久久久久婷婷天堂| 成人精品一区二区三区电影免费| 亚洲精品中文字幕女同| 日本高清久久天堂| 精品国产拍在线观看| 日韩中文字幕不卡视频| 欧美午夜性色大片在线观看| 日本精品在线视频| 亚洲成人激情小说| 欧美亚洲在线观看| 日韩亚洲欧美中文高清在线| 亚洲国产精品网站| 国产一区二中文字幕在线看| 成人性生交大片免费观看嘿嘿视频|