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

首頁 > 編程 > Swift > 正文

Swift語言中的一些訪問控制設(shè)置詳解

2020-03-09 17:52:59
字體:
供稿:網(wǎng)友
這篇文章主要介紹了Swift語言中的一些訪問控制設(shè)置詳解,是Swift入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
 

限制訪問代碼塊,模塊和抽象通過訪問控制來完成。類,結(jié)構(gòu)和枚舉可以根據(jù)自己的屬性,方法,初始化函數(shù)和下標來通過訪問控制機制進行訪問。常量,變量和函數(shù)的協(xié)議限制,并允許通過訪問控制來訪問全局和局部變量。應(yīng)用于屬性,類型及函數(shù)的訪問控制可以被稱為“實體”。

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

模塊定義為代碼分配一個單獨的單元,并且可以使用import 關(guān)鍵字導入。源文件被定義為一個單一的源代碼文件,模塊可訪問多種類型和函數(shù)。

三種不同的訪問級別是由 Swift 語言提供。它們分別是 Public, Internal 和 Private 訪問。

Swift語言中的一些訪問控制設(shè)置詳解

語法

復制代碼代碼如下:

public class SomePublicClass {}
internal class SomeInternalClass {}
private class SomePrivateClass {}

 

public var somePublicVariable = 0
internal let someInternalConstant = 0
private func somePrivateFunction() {}


對于函數(shù)類型的訪問控制
某些函數(shù)可能有參數(shù)在函數(shù)聲明中但沒有任何返回值。下面的程序聲明 a 和 b 作為參數(shù)傳遞給sum()函數(shù)。內(nèi)部函數(shù)本身為參數(shù)a和b的值是通過調(diào)用所述通過調(diào)用函數(shù) sum(),其值被打印從而不用返回值。為了使函數(shù)的返回類型為私有,聲明函數(shù)使用 private 修飾整體訪問級別。
復制代碼代碼如下:

private func sum(a: Int, b: Int) {
   let a = a + b
   let b = a - b
   println(a, b)
}

 

sum(20, 10)
sum(40,10)
sum(24,6)


當我們使用 playground 運行上面的程序,得到以下結(jié)果

 

(30, 20)(50, 40)(30, 24)

對于枚舉類型的訪問控制

復制代碼代碼如下:

public enum Student{
   case Name(String)
   case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
   case .Name(let studName):
      println("Student name is: /(studName).")
   case .Mark(let Mark1, let Mark2, let Mark3):
      println("Student Marks are: /(Mark1),/(Mark2),/(Mark3).")
   default:
      println("Nothing")
}

當我們使用 playground 運行上面的程序,得到以下結(jié)果

 

Student Marks are: 98,97,95

枚舉在Swift語言中將自動接收枚舉個體并都具有相同的訪問級別。例如,考慮訪問固定于三個科目枚舉名稱,學生的名字和標記被聲明為 student 而存在于枚舉類中的成員都屬于字符串數(shù)據(jù)類型名稱,標記表示為 mark1, mark2 和 mark3 數(shù)據(jù)類型為整數(shù)。要訪問無論是學生名稱或標記分數(shù)。 現(xiàn)在,如果被執(zhí)行 Switch case 塊將打印學生姓名,否則它將打印由學生固定的標記。如果這兩個條件都失敗默認塊將被執(zhí)行。

子類訪問控制
Swift 允許用戶子類,可以在當前訪問上下文存取的任何類。子類不能比其超類有更高的訪問級別。 用戶限制一個公共子類寫入一個內(nèi)部超類。

復制代碼代碼如下:

public class cricket {
      private func print() {
         println("Welcome to Swift Super Class")
   }
}

 

internal class tennis: cricket  {
   override internal func print() {
      println("Welcome to Swift Sub Class")
   }
}

let cricinstance = cricket()
cricinstance.print()

let tennisinstance = tennis()
tennisinstance.print()


當我們使用 playground 運行上面的程序,得到以下結(jié)果

 

Welcome to Swift Super ClassWelcome to Swift Sub Class

常量,變量,屬性和下標訪問控制
Swift 常量,變量或?qū)傩圆荒鼙欢x比其類型更公開。這是無效一個 public 屬性與 private 類型的寫法。同樣,下標不能超過其索引或返回類型更公開。

當一個常量,變量,屬性或下標使用了一個私有類型,則常量,變量,屬性或下標,也必須標記為私有:

 

復制代碼代碼如下:
private var privateInstance = SomePrivateClass()

 

Getters 和 Setters
getter和setter常量,變量,屬性和標自動接收它們屬于相同的訪問級別的常量,變量,屬性或下標。
復制代碼代碼如下:

class Samplepgm {
   private var counter: Int = 0{
      willSet(newTotal){
         println("Total Counter is: /(newTotal)")
      }
      didSet{
         if counter > oldValue {
            println("Newly Added Counter /(counter - oldValue)")
         }
      }
   }
}

let NewCounter = Samplepgm()
NewCounter.counter = 100
NewCounter.counter = 800


當我們使用 playground 運行上面的程序,得到以下結(jié)果

 

Total Counter is: 100Newly Added Counter 100Total Counter is: 800Newly Added Counter 700

訪問控制的初始化和默認初始化器
自定義初始化函數(shù)可分配的接入級別小于或等于它們初始化的類型。一個必需的初始化必須具有相同的訪問級別,因為它們和類相同。一個初始化的參數(shù)的類型不能比初始化自己的訪問級別更私密(更高)。

聲明每個和初始化每個子類, “required” 關(guān)鍵字需要在init()函數(shù)之前定義。

復制代碼代碼如下:

class classA {
   required init() {
      var a = 10
      println(a)
   }
}

 

class classB: classA {
   required init() {
      var b = 30
      println(b)
   }
}

let res = classA()
let print = classB()


當我們使用 playground 運行上面的程序,得到以下結(jié)果

 

103010

默認初始化具有相同的訪問級別,因為它初始化,除非該類型被定義為公共類型。 當默認初始化定義為公共它被認為是內(nèi)部的。當用戶需要一個公共類型在另一個模塊中的一個無參數(shù)初始化進行初始化,明確提供一個公共的無參數(shù)初始化作為類型定義的一部分。

對于協(xié)議的訪問控制
當我們定義一個新的協(xié)議,從現(xiàn)有的協(xié)議繼承的功能,既有聲明相同的訪問級別以相互繼承屬性。Swift 訪問控制允許用戶定義 “public” 協(xié)議,它繼承自 “internal” 的協(xié)議。

復制代碼代碼如下:

public protocol tcpprotocol {
   init(no1: Int)
}

 

public class mainClass {
   var no1: Int // local storage
   init(no1: Int) {
      self.no1 = no1 // initialization
   }
}

class subClass: mainClass, tcpprotocol {
   var no2: Int
   init(no1: Int, no2 : Int) {
      self.no2 = no2
      super.init(no1:no1)
   }

   // Requires only one parameter for convenient method
   required override convenience init(no1: Int)  {
      self.init(no1:no1, no2:0)
   }
}

let res = mainClass(no1: 20)
let print = subClass(no1: 30, no2: 50)

println("res is: /(res.no1)")
println("res is: /(print.no1)")
println("res is: /(print.no2)")


當我們使用 playground 運行上面的程序,得到以下結(jié)果

 

res is: 20res is: 30res is: 50

擴展訪問控制
當用戶使用擴展來添加協(xié)議的一致性,Swift 不允許用戶為擴展提供一個明確的訪問級別修飾符。對于在每個協(xié)議的擴展,要求實現(xiàn)的默認訪問級別設(shè)置自己的協(xié)議訪問級別。

對于泛型訪問控制
泛型允許用戶指定最小訪問級別來訪問類型約束其類型參數(shù)。

復制代碼代碼如下:

public struct TOS<T> {
   var items = [T]()
   private mutating func push(item: T) {
      items.append(item)
   }

 

   mutating func pop() -> T {
      return items.removeLast()
   }
}

var tos = TOS<String>()
tos.push("Swift")
println(tos.items)

tos.push("Generics")
println(tos.items)

tos.push("Type Parameters")
println(tos.items)

tos.push("Naming Type Parameters")
println(tos.items)
let deletetos = tos.pop()


當我們使用 playground 運行上面的程序,得到以下結(jié)果

 

[Swift][Swift, Generics][Swift, Generics, Type Parameters][Swift, Generics, Type Parameters, Naming Type Parameters]

對于類型別名訪問控制
用戶可以定義類型別名對待不同的訪問控制類型。 相同的訪問級別或不同的訪問級別可以由用戶定義。當類型別名為 “private” 及其相關(guān)成員可以聲明為 “private,內(nèi)部 public 類型 ”。當類型別名是公共成員不能是別名為 “internal” 或 “private” 的名稱

定義任何類型別名被視為用于不同類型的訪問控制的目的。一個類型別名可以具有小于或等于它的一個訪問級別別名的類型的訪問級別。例如,private類型別名可以別名為 private, internal, 或 public,而 public 類型別名不能別名為 internal 或 private 類型。

復制代碼代碼如下:

 public protocol Container {
   typealias ItemType
   mutating func append(item: ItemType)
      var count: Int { get }
      subscript(i: Int) -> ItemType { get }
}

 

struct Stack<T>: Container {
   // original Stack<T> implementation
   var items = [T]()
   mutating func push(item: T) {
      items.append(item)
   }

   mutating func pop() -> T {
      return items.removeLast()
   }

   // conformance to the Container protocol
   mutating func append(item: T) {
      self.push(item)
   }
   
   var count: Int {
      return items.count
   }

   subscript(i: Int) -> T {
      return items[i]
   }
}

func allItemsMatch<
   C1: Container, C2: Container
   where C1.ItemType == C2.ItemType, C1.ItemType: Equatable>
   (someContainer: C1, anotherContainer: C2) -> Bool {
   // check that both containers contain the same number of items
   if someContainer.count != anotherContainer.count {
      return false
   }

   // check each pair of items to see if they are equivalent
   for i in 0..<someContainer.count {
      if someContainer[i] != anotherContainer[i] {
         return false
      }
   }

   // all items match, so return true
   return true
}

var tos = Stack<String>()
tos.push("Swift")
println(tos.items)

tos.push("Generics")
println(tos.items)

tos.push("Where Clause")
println(tos.items)

var eos = ["Swift", "Generics", "Where Clause"]
println(eos)


當我們使用 playground 運行上面的程序,得到以下結(jié)果

 

[Swift][Swift, Generics][Swift, Generics, Where Clause][Swift, Generics, Where Clause]


注:相關(guān)教程知識閱讀請移步到swift教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
久久久久麻豆v国产| 国产麻豆免费| 久久美女艺术照精彩视频福利播放| 亚洲精品无播放器在线播放| 午夜精品一区二区三区在线视| 狠狠色伊人亚洲综合网站l| 黄色片一区二区三区| 少妇精品无码一区二区| 日韩精品在线私人| 免费视频最近日韩| 天天操天天爽天天射| 国产精品亚洲人在线观看| 久久久精品免费视频| 绯色av一区二区| 国产精品乱看| 亚洲911精品成人18网站| 国产精品无码天天爽视频| 一级黄色免费片| 国产熟妇久久777777| 国产亚洲永久域名| 国产黄色精品网站| 99视频在线观看视频| 一区二区三区日韩在线观看| 色欲av永久无码精品无码蜜桃| 欧美三级韩国三级日本三斤| 91精品国产电影| 亚洲最新永久观看在线| 国产成人精品免高潮费视频| 中文字幕精品一区二区精品绿巨人| 久久露脸国语精品国产91| 欧美精品欧美精品系列c| 亚洲日本香蕉视频| 国产毛片精品视频| 美女翘臀白浆直流视频| 亚洲AV无码成人片在线观看| 黄色成人在线观看| 久久久久99精品成人片毛片| 欧美激情中文字幕| 欧美亚洲国产视频小说| 4438x全国最大成人| av大片免费看| 欧美日韩电影在线播放| 国产区在线观看成人精品| 亚洲欧美一区二区三| 好久没做在线观看| 黄页网址大全在线播放| 亚洲男人天堂视频| 国产精品福利在线观看网址| 欧美国产日本韩| 91久久人澡人人添人人爽欧美| 亚洲精品免费一区亚洲精品免费精品一区| 五月婷婷综合激情网| 亚州一区二区三区| 成人黄色电影网址| 一个人看的日本www的免费视频| 亚洲国产一区在线观看| 99热手机在线观看| 9191国产视频| 日韩精品久久久毛片一区二区| 欧美性xxxxxxxxx| 污污视频在线| 极品少妇xxxx偷拍精品少妇| 黄色网址在线免费看| 国产精选在线观看| 亚洲av无码一区二区三区网址| 国产精品一区在线观看你懂的| 妞干网2018| 亚洲成人国产综合| av中文字幕一区| 亚洲精品乱码久久久久久动漫| 日本在线播放一二三区| 牛牛影视精品影视| 亚洲欧美视频二区| 国产成人亚洲综合无码| 欧美日韩小视频| 91亚洲精品国偷拍自产在线观看| 国产精品国模大尺度私拍| 国产91丝袜在线播放0| 狠狠干五月天| 人人妻人人藻人人爽欧美一区| 日韩1区在线| 高清欧美日韩| 性久久久久久久久久久久| 一区二区视频在线看| 91免费国产精品| 亚色视频在线观看| 午夜精品久久久久久不卡8050| 99久久久免费精品| 精品少妇v888av| 九色国产蝌蚪| 在线成人av网站| 成人性a激情免费视频| 亚洲国产欧美国产综合一区| 蜜臀久久99精品久久久无需会员| 亚洲精品第一国产综合精品| www.男人天堂.com| zztt21.su黑料网站| 久久国产精品区| 欧美在线视频不卡| 欧美色图影院| 综合久久给合久久狠狠狠97色| 欧美黄色一级网站| 精品淫伦v久久水蜜桃| 亚洲午夜精品久久久| 精品久久免费观看| 精品1区2区在线观看| 国产精品久久福利| 日本免费精品视频| 黄色成人av在线| 欧美日韩国产首页| 国产一区精品福利| 精品国产伦一区二区三区观看方式| 五月天一区二区| 麻豆久久久久久久| 国产精品国产三级国产试看| 亚洲美女福利视频| 三年中文高清在线观看第6集| 亚洲男人的天堂在线aⅴ视频| 免费视频91蜜桃| 色中色综合影院手机版在线观看| 国产精品久久久久av电视剧| 成人无码av片在线观看| 99精品在线观看视频| 亚洲日穴在线视频| 97人人模人人爽人人少妇| 久草在线资源网| 久久综合资源网| 亚洲精品第二页| 中文字幕久久精品| 国产亚洲精品美女久久久m| 久在线观看福利视频| 国产成人短视频在线观看| 性农村xxxxx小树林| 亚洲精品在线一区二区| 欧美乱人伦中文字幕在线| 污污视频网站| 国产传媒欧美日韩成人精品大片| 678五月天丁香亚洲综合网| 不卡视频一区| 一区二区三区四区精品| 亚洲警察之高压线| 国产成人无码av在线播放dvd| 亚洲精品久久久久久久久久久久久| 成人夜色视频网站在线观看| av片在线免费看| 久久av老司机精品网站导航| 久久一日本道色综合| 日韩欧美国产网站| 国产精品边吃奶边做爽| 91亚洲国产成人久久精品网站| 看欧美ab黄色大片视频免费| 精品国产999| 国产a区久久久| 国产精品麻豆网站| 日本高清在线观看视频| 北条麻妃99精品青青久久| 91免费在线看片| 挪威xxxx性hd极品| 中文字幕亚洲成人| 伦xxxx在线| 国产精品99久久免费黑人人妻| 人妻无码一区二区三区四区| 影音先锋中文字幕在线视频| 一区二区三区欧美日韩| 日本高清在线观看wwwww色| 在线观看亚洲一区二区| 亚洲免费资源在线播放| 91香蕉视频污在线| 久久电影国产免费久久电影| 国产精品女主播一区二区三区| 亚洲精品久久久久久久久久久| 亚洲精品美女| 不卡的电视剧免费网站有什么| 国产成人在线观看网站| 在线观看h片| 久久精品国产精品亚洲综合| 91麻豆精品国产91久久久| 美女流白浆视频| 爽爽爽爽爽爽爽成人免费观看| 97操碰视频| 中文字幕日韩第一页| 手机在线免费观看av| 中国一级片黄色一级片黄| 精品一区二区三区视频日产| 日本妇乱大交xxxxx| 五月天黄色网址| av 日韩 人妻 黑人 综合 无码| 亚洲图中文字幕| 国产美女免费看| 黄色成人小视频| 男人操女人免费网站| 成人免费公开视频| 亚洲不卡av一区二区三区| 国内一区二区三区在线视频| 天天综合天天做天天综合| japanese色国产在线看视频| 又黄又爽又色的视频| 亚洲精品成av人片天堂无码| 麻豆亚洲精品| 欧美一级二级视频| 欧美午夜精品久久久久免费视| 日本免费在线精品| 欧美日韩一区成人| 日本a视频在线观看| 97超级碰碰人国产在线观看| 国产精品国产三级国产a| 日韩三级在线免费观看| 国产成人禁片免费观看视频| 精品无码一区二区三区爱欲| 国产又粗又黄又爽的视频| 国产精品123区| 欧美日韩破处视频| 欧美在线激情网| 精品少妇一区二区三区在线视频| 欧美日韩在线视频免费观看| 成人免费无遮挡无码黄漫视频| 黄色大片免费观看| 男人天堂久久久| 99视频在线播放| 不卡av播放| 欧美久久久一区| 伊人五月天婷婷| 成人午夜视频网站| 九色福利视频| 久久久女女女女999久久| 高清亚洲成在人网站天堂| 国产乱妇无码大片在线观看| 日本欧美韩国国产| 亚洲免费视频网| 99综合久久| 久久一区二区三区喷水| 在线观看免费视频你懂的| 日本h片在线观看| 污污的网站18| 欧美一级一片| 国产欧美一区二区三区在线看蜜臀| 六月婷婷激情综合| 日韩主播视频在线| 亚洲欧美日韩综合在线| 久久99青青精品免费观看| 亚洲国产精品久久久男人的天堂| 天堂久久久久久| 久久精品女同亚洲女同13| 最近2019中文字幕一页二页| wwwxxxx在线观看| 国产在线观看免费视频今夜| 欧美大片在线观看一区| 成人美女视频| 免费观看成人在线视频| 全部av―极品视觉盛宴亚洲| 亚洲欧美精品aaaaaa片| 国产精品久久久久久久7电影| 国产ts人妖一区二区三区| 日韩av中字| 日韩成人在线免费视频| 亚洲 高清 成人 动漫| 欧美午夜精品伦理| 青青国产91久久久久久| 91国产免费看| 天天搞夜夜操| 欧美 日韩 国产 成人 在线观看| 伊人久久大香线蕉av不卡| 久久久久久亚洲精品中文字幕| 青青草97国产精品麻豆| 深夜在线视频| 色婷婷成人在线| 亚洲激情五月| 欧美一区二区三区日韩视频| 国产成人精品视频ⅴa片软件竹菊| 国产成人免费视频| 欧美啪啪小视频| 91福利视频网站| 成人无码一区二区三区| 免费视频91| 黑人玩欧美人三根一起进| 日韩欧美午夜| 在线中文字幕电影| 国产精品视频一区麻豆| 国产毛片视频| 国产精品国产自产拍高清av水多| 国产一区二区三区日韩欧美| 国产精品极品美女在线观看免费| 日日摸夜夜添夜夜添亚洲女人| 97影院手机在线观看| 精品国产精品三级精品av网址| 里番在线播放| 黑人精品一区二区三区| 亚洲男人天堂av在线| 国产一区二区中文字幕免费看| 国产伦精品一区二区免费| 亚洲黄色在线播放| 久久综合五月天| 91九色鹿精品国产综合久久香蕉| 成人一区二区电影| 免费污网站在线观看| 超碰人人人人人人人| 久久精品国产成人| 国产精品天美传媒沈樵| 成人影片在线播放| 欧洲午夜精品久久久| 久久综合伊人77777蜜臀| 日本视频一区在线观看| 黄色的电影在线-骚虎影院-骚虎视频| 免费观看国产精品视频| 亚洲日本在线观看| 国产youjizz在线| 欧美成熟毛茸茸| 麻豆电影在线| 久久婷婷国产91天堂综合精品| 欧美野外性xxxxfeexxxx| 台湾佬中文在线| 亚洲韩日在线| 一区二区三区韩国免费中文网站| 精品一区二区三区在线观看视频| 国产成人精品一区二三区| 国产传媒在线播放| 人妻大战黑人白浆狂泄| 三级黄色在线视频| 久草网视频在线观看| 美女黄毛**国产精品啪啪| 欧美三级网站在线观看| 国产原创欧美精品| 无码免费一区二区三区免费播放| 偷拍自拍一区| 天天操天天射天天色| 日韩中文综合网| 一本加勒比北条麻妃| 久久人人爽人人人人片|