日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > Swift > 正文

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

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

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

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

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

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

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

語法

復(fù)制代碼代碼如下:

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 修飾整體訪問級別。
復(fù)制代碼代碼如下:

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)


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

 

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

對于枚舉類型的訪問控制

復(fù)制代碼代碼如下:

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")
}

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

 

Student Marks are: 98,97,95

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

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

復(fù)制代碼代碼如下:

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()


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

 

Welcome to Swift Super ClassWelcome to Swift Sub Class

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

當(dāng)一個常量,變量,屬性或下標(biāo)使用了一個私有類型,則常量,變量,屬性或下標(biāo),也必須標(biāo)記為私有:

 

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

 

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

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


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

 

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

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

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

復(fù)制代碼代碼如下:

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()


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

 

103010

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

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

復(fù)制代碼代碼如下:

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)")


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

 

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

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

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

復(fù)制代碼代碼如下:

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()


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

 

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

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

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

復(fù)制代碼代碼如下:

 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)


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

 

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


注:相關(guān)教程知識閱讀請移步到swift教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
92久久精品| 欧美不卡视频一区| 国产在线小视频| 伊人伊成久久人综合网小说| 亚洲 国产 欧美 日韩| 92久久精品| 亚洲欧美99| 91精品国产综合久久香蕉的特点 | 日韩亚洲不卡在线| 最新中文在线视频| 内射国产内射夫妻免费频道| 蜜桃精品视频| 国产丝袜在线播放| 极品久久久久久| 国产欧美中文在线| 日韩国产欧美| 国产无遮挡在线视频免费观看| 国产丝袜一区| 中文字幕国产在线| 国产高清一级片| 日韩视频第二页| 亚洲成av人片在线| 韩国av一区二区| 亚洲女人天堂色在线7777| 日韩免费高清一区二区| 久久久91精品国产| 欧美日韩国产片| 国产亚洲欧美色| 久草视频观看| 精品av中文字幕在线毛片| 中文字幕亚洲欧美| 91久久精品网| 91精品视频在线| 日韩在线视频在线观看| 亚洲福利视频在线| 亚洲一区不卡在线| 国产 中文 字幕 日韩 在线| 精品免费久久久| 最近中文av字幕在线中文| 国产黄色一级片| 国产手机精品视频| 成人ww免费完整版在线观看| 欧美日韩精品中文字幕| 视频在线一区二区| 在线视频1区2区| 亚洲热线99精品视频| 欧美日韩综合视频| 狠狠色综合色区| 欧美日韩乱国产| 日韩欧美国产高清91| 婷婷久久综合九色国产成人| 中文字幕久久精品| 中文字幕日韩在线视频| 欧美日韩国产首页| av中文在线资源| 国产欧美日韩亚州综合| 久草视频在线看| 亚洲成av人片| 国产日韩成人精品| 亚洲福利精品视频| 久久久综合精品| 亚洲一区视频在线观看视频| 国产欧美综合视频| 99久久久精品免费观看国产 | 日韩视频一区| 欧美国产日韩在线播放| 久久久99免费| 精品国产免费观看一区| 精品亚洲成a人片在线观看| 亚洲免费中文字幕| 欧美一级久久久久久久久大| 久久欧美中文字幕| 久久精品最新免费国产成人| 日韩中文字幕在线视频播放| 欧美.日韩.国产.一区.二区| 国产一二三精品| 激情国产在线| 亚洲第一视频| 欧美日韩综合色| 日韩免费看网站| 亚洲男女av一区二区| 黄色视屏免费在线观看| 日韩美女中文字幕| 日韩欧美国产高清91| 久久久精品国产免费观看同学| 中文字幕中文字幕精品| 国产极品嫩模在线视频一区| 久久精品视频免费看| 日本精品福利视频| 亚洲a中文字幕| 国产福利久久| 在线视频不卡一区二区| 中文字幕99| 欧美日韩视频在线| 亚洲综合在线中文字幕| 久久精品国产91精品亚洲| 日韩在线视频在线观看| 国产香蕉精品视频| 日韩国产成人| 色综合婷婷久久| 国产欧美日韩久久| 欧美三级三级三级爽爽爽| 欧美日韩国产高清一区| 免费国产成人看片在线| 久久婷婷中文字幕| 国产欧美日韩视频在线| 中文字幕日韩欧美| 久久精品日韩无码| www在线视频| 日韩免费精品| 91精品国产91久久| 韩国v欧美v日本v亚洲| 久久精品久久久久| 日韩在线二区| 在线观看区一区二| 精品一区二区在线观看视频| 精品一区二区三区中文字幕 | 亚洲综合在线不卡| 国产日韩免费| 精品国产免费观看一区| 欧美日韩国产页| 二区视频在线观看| 国产亚洲一区字幕| av中文资源在线| 欧美日韩国产在线看| 97最新国自产拍视频在线完整在线看| 亚洲第一网中文字幕| 午夜国产视频 | 国产区日韩欧美| 日韩高清不卡在线| 中文字幕 乱码 中文乱码91| 精品视频在线导航| 99热最新网址| 国产中文在线观看| 99精品免费观看| 91精品久久久久久久91蜜桃| 中文字幕亚洲一区在线观看| 国产无套粉嫩白浆在线2022年 | 日韩欧美中文字幕视频| 亚洲视频色图| 中文字幕欧美人妻精品一区蜜臀| 亚洲一区在线视频观看| 日韩精品在线私人| 亚洲免费中文字幕| 99精品人妻国产毛片| 欧美久久在线观看| 国产亚洲二区| 欧美成人二区| 国产高清在线观看| 国产v日产∨综合v精品视频| 首页国产欧美久久| 国产一区日韩| 久久欧美中文字幕| 精品三级久久| 精品一二三四| 日韩视频一区在线观看| 日韩精品丝袜在线| 欧美三级在线看| 日韩精品视频免费| 欧美精选午夜久久久乱码6080| 精品在线99| 中文字幕2020第一页| 中文字幕精品亚洲| 欧美一级二级三级区| 欧美sm一区| 亚洲一区在线观看免费| 亚洲a级在线播放观看| 中文字幕欧美日韩va免费视频| 中文字幕亚洲区| 日本精品在线中文字幕| 免费在线视频一区二区| 91精品久久久久久久久久| 欧美日韩中文| 久久久久久自在自线| 婷婷久久综合网| 不卡视频一区二区三区| 亚洲欧美中文字幕在线一区| 精品国产99| 欧美日韩一二三四| 天天综合天天| 最近中文av字幕在线中文| 欧美区高清在线| 一区二区三区免费看视频 | 中文字幕亚洲第一| 国产中文伊人| 91精品国产91久久久久久青草| 久久久91精品| 午夜一区二区三区免费| 日韩欧美综合视频| 亚洲热在线观看| 久久婷婷亚洲| 国产一区在线观看视频| 亚洲小说春色综合另类电影| 国产免费久久| 国产在线精品国自产拍免费| 在线欧美日韩精品| 久久精品国产成人一区二区三区| 欧美日韩高清| 91精品国产丝袜白色高跟鞋| 日韩免费电影网站| 欧美日韩激情一区二区三区| 国产欧美久久久| 欧美va亚洲va日韩∨a综合色| 日韩视频国产视频| 日本亚洲欧美三级| 国产视频1区| 在线观看国产一区| 亚洲欧洲国产视频| 日韩免费看网站| 亚洲高清精品视频| 国产欧美日韩不卡| 国产高清视频一区二区| 久久视频在线免费观看| 日韩在线一区二区| 中文字幕线观看| 国产成人精品三级| av一区二区高清| 欧美日韩在线视频免费观看 | 日韩国产一区| 国产在线观看精品| 一区二区三区精品久久久| 日韩视频一区| 日韩在线不卡| 国产区视频在线观看| 精品久久香蕉国产线看观看gif| a天堂中文在线官网在线| 欧美日韩精品欧美日韩精品 | 中文精品在线| 久久精品电影| 最新日韩中文字幕| 91精品国产免费久久综合| 亚洲第一页中文字幕| 亚洲一区导航| 中文字幕在线视频第一页| 日韩精品在线免费播放| 日韩免费视频| 日韩中文欧美在线| 欧美日韩高清在线播放| 欧美国产中文| 欧美 日韩 国产 在线观看| 中文字幕国产视频| 国产天堂素人系列在线视频| 91久久久久久久久| 中文在线а√在线8| 日韩久久不卡| 午夜av一区二区| 国产高清在线一区| 亚洲欧美中文字幕| 国产成人精品三级| 亚洲欧洲三级| 综合激情一区| 91精品久久久久| 国内精品不卡| 欧美日韩高清一区二区| 久久婷婷中文字幕| 欧美特黄一区| 91精品国产91久久久久| 搞黄在线观看| 一区二区欧美国产| 国产黄色在线免费观看| 中文字幕久久精品| 黄色在线播放网站| 精品日韩一区二区三区免费视频| 91精品国产手机| 国内激情久久| 欧美日韩中文字幕一区| 国产丝袜在线播放| 偷窥国产亚洲免费视频| h片精品在线观看| 91精品久久久久久蜜臀| 婷婷精品进入| 欧美日韩国产黄色| 国产欧美日韩综合| 黄色在线播放网站| 婷婷中文字幕综合| 欧美日韩在线播放三区四区| 中文字幕久久精品| 91久久精品国产91性色69| 日韩国产成人精品| 久久久久久久久综合| 一区二区三区在线|网站| 快she精品国产999| 美女免费视频一区| 国产日韩第一页v| 中文字幕2020第一页| 一区二区三区四区五区视频在线观看| 日韩免费电影网站| 黄色在线播放网站| 国产一区二中文字幕在线看| 日韩中文字幕91| 国产日韩精品久久久| 国产一级在线免费观看| 欧美中日韩在线| 国产字幕中文| 国产视频中文字幕在线观看| 欧美日韩亚洲视频| 国产精久久久久| 亚洲免费在线观看av| 欧美国产一级片| 不卡中文一二三区| 国产综合精品在线| 亚洲欧美日本国产专区一区| 欧美日韩国产专区| 国产日产一区二区三区| 亚洲中午字幕| 精品国产1区2区3区| 免费高清特黄a大片| 亚洲乱码中文字幕综合| 亚洲一区中文字幕在线观看| 欧美日韩三级视频| 一区二区不卡视频| 日韩在线视频精品| 免费国产h视频在线观看86| 国产视频1区2区| 精品人妻一区二区三区视频| 亚洲黄色www| 日韩在线视频网| 天堂在线视频中文网| 亚洲国产欧美91| 欧美一级手机免费观看片| 91精品久久久久久久久| 国产成人精品免费在线| 免费看黄资源大全高清| 国产黄色精品| 久久精品电影| 精品九九久久| 国产区高清在线| 日韩欧美亚洲日产国| www.中文字幕在线| 欧美日韩国产综合视频在线观看| 日韩在线观看精品| 日韩欧美在线中字| 最近免费中文字幕在线第一页| 成人欧美亚洲| 亚洲中午字幕| 91精品视频播放| 日韩免费不卡avV| 欧美一卡2卡三卡4卡5免费| 国产欧美日韩高清| 国产欧美日韩精品在线| 91亚洲国产| 午夜伊人狠狠久久| 视频一区视频二区中文| 精品一区二区在线观看视频| 久久久99久久精品欧美| 久久91精品视频| 日韩在线视频观看| 亚洲精品欧美二区三区中文字幕| 视频一区日韩| 国产一级视频| 国产欧美 在线欧美| 精品视频—区二区三区免费| 久久精品久久久久| 91久久大香伊蕉在人线| 日韩三级视频中文字幕| 国产资源中文字幕| 日韩一级中文字幕| 欧美成人二区| 国产xxx在线| 久久久久蜜桃| 中文字幕在线高清| 亚洲羞羞网站| 亚州黄色一级| 日韩在线高清| 国产一级免费看| 国内精品露脸在线视频播放| 欧美一级手机免费观看片| 在线观看91精品国产入口| 欧美日韩亚洲综合| 亚洲人线精品午夜| 欧美日韩免费不卡视频一区二区三区| 欧美日韩视频免费看| 亚洲欧美视频一区二区三区| 中文在线а√在线8| 国产999精品在线观看| 亚洲黄色在线观看| 日韩欧美综合在线| 欧美一级一级性生活免费录像| 欧美一级日韩不卡播放免费| 日韩精品视频在线观看视频| 中文字幕亚洲国产| 亚洲欧洲精品在线| 午夜国产视频| 国内精品99| 日韩精品在线网站| 日韩视频在线观看视频| 中文字幕国产视频| 国产成人精品免费在线| 欧美日韩国产高清视频| 久久香蕉av| 国产真实乱子伦精品视频| 国产一级久久久| 精品国产乱码久久久久久蜜臀| 欧美日韩中文字幕| 国产字幕在线看| 日韩中文字幕在线视频播放| 久久久久蜜桃| 久99久视频| 欧美日韩国产综合网| 不卡一区二区三区视频|