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

Swift中的協(xié)議(protocol)學(xué)習(xí)教程

 更新時間:2016年07月08日 18:35:29   作者:琿少  
協(xié)議中可以定義一些基本的需要被實例化的屬性,這里我們就來看一下Swift中的協(xié)議(protocol)學(xué)習(xí)教程,需要的朋友可以參考下

一、引言

協(xié)議約定了一些屬性與方法,其作用類似Java中的抽象類,Swift中類型通過遵守協(xié)議來實現(xiàn)一些約定的屬性和方法。Swift中的協(xié)議使用protocol關(guān)鍵字來聲明。Swift中的協(xié)議還有一個十分有意思的特性,協(xié)議可以通過擴展來實現(xiàn)一些方法和附加功能。

二、在協(xié)議中定義屬性和方法

協(xié)議中定義的屬性只約定名稱和類型,在具體類型的實現(xiàn)中,其可以是存儲屬性也可以是計算屬性,協(xié)議中還需要指定屬性是可讀的還是可讀可寫的。示例代碼如下:

protocol MyPortocol {
  //定義實例屬性
  //可讀的
  var name:String{get}
  //可讀可寫的
  var age:Int{set get}
  //可讀的
  var nameAndAge:String{get}
  static var className:String{get}
}
class MyClass: MyPortocol {
  var name: String
  var age: Int
  var nameAndAge: String{
    get{
      return "\(name)"+"\(age)"
    }
  }
  static var className: String{
    get{
      return "MyClass"
    }
  }
  init(){
    name = "HS"
    age = 24
  }
}

有一點需要注意,協(xié)議中的可讀并不是只讀,協(xié)議中的屬性約定成可讀可寫,則在實現(xiàn)時,這個屬性必須是可讀可寫的,但是如果協(xié)議中約定成可讀的,則此屬性可以是只讀的也可以是可讀可寫的,看具體的實現(xiàn)。

協(xié)議中約定的方法可以是實例方法也可以是類型方法,示例如下:

protocol MyPortocol {
  func logName()
  static func logClassName()
}
class MyClass: MyPortocol {
  var name: String
  var age: Int
  init(){
    name = "HS"
    age = 24
  }
  func logName() {
    print(name)
  }
  static func logClassName() {
    print(className)
  }
}

同樣,協(xié)議中也可以對構(gòu)造方法進行定義約定。

三、協(xié)議的特點

協(xié)議中雖然沒有任何屬性和方法的實現(xiàn),但是其仍然可以當做類型來使用,在函數(shù)參數(shù)、返回值中應(yīng)用廣泛,示例如下:

protocol MyPortocol {
  //定義實例屬性
  var name:String{get}
  var age:Int{set get}
  var nameAndAge:String{get}
  static var className:String{get}
  func logName()
  static func logClassName()
}
//將協(xié)議類型作為參數(shù)
func test(param:MyPortocol) {
  param.logName()
}

協(xié)議作為類型這種用法另一個應(yīng)用點是在集合類型中,協(xié)議可以作為所有遵守此協(xié)議的集合類型。

協(xié)議可以像其他類型一樣進行繼承,子協(xié)議將自動擁有父協(xié)議約定的屬性和方法。協(xié)議也可以通過class關(guān)鍵字來定義只有類可以進行遵守,示例如下:

protocol MyPortocol {
  //定義實例屬性
  var name:String{get}
  var age:Int{set get}
  var nameAndAge:String{get}
  static var className:String{get}
  func logName()
  static func logClassName()
}
//只有類可以繼承此協(xié)議
protocol MySubPortocol:class,MyPortocol {
  
}

協(xié)議既然可以像其他類型一樣進行使用,當然它也可以使用is,as?,as!進行檢查和轉(zhuǎn)換,關(guān)于is,as的更多用法可以查看Swift關(guān)于類型轉(zhuǎn)換的內(nèi)容。

協(xié)議也可定義其中的屬性或方法為可選的,即遵守此協(xié)議的類可以實現(xiàn)也可以不實現(xiàn)可選的屬性和方法,然而,聲明為可選的需要此協(xié)議為@objc類型的,示例如下:

@objc protocol MyPortocol {
  //定義實例屬性
  var name:String{get}
  var age:Int{set get}
  var nameAndAge:String{get}
  static var className:String{get}
  func logName()
  //可選實現(xiàn)
  optional static func logClassName()
}

Swift中的協(xié)議還有一個十分重要的特性,其可以通過擴展來進行屬性、方法以及下標的實現(xiàn)。這對于一些通用類的方法十分方便,這相當于所有繼承此協(xié)議的類都默認實現(xiàn)了這樣的方法,示例如下:

protocol MyPortocol {
  //定義實例屬性
  var name:String{get}
  var age:Int{set get}
  var nameAndAge:String{get}
  static var className:String{get}
  func logName()
  static func logClassName()
}
extension MyPortocol{
  var name:String{
    return "HS"
  }
}

相關(guān)文章

  • Linux環(huán)境下安裝python3

    Linux環(huán)境下安裝python3

    這篇文章介紹了Linux環(huán)境下安裝python3的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Python利用format函數(shù)實現(xiàn)對齊打印(左對齊、右對齊與居中對齊)

    Python利用format函數(shù)實現(xiàn)對齊打印(左對齊、右對齊與居中對齊)

    format是字符串內(nèi)嵌的一個方法,用于格式化字符串,下面這篇文章主要給大家介紹了關(guān)于Python利用format函數(shù)實現(xiàn)對齊打印(左對齊、右對齊與居中對齊)的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Jupyter?ipywidgets組件的使用及說明

    Jupyter?ipywidgets組件的使用及說明

    這篇文章主要介紹了Jupyter?ipywidgets組件的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Python中使用異常處理來判斷運行的操作系統(tǒng)平臺方法

    Python中使用異常處理來判斷運行的操作系統(tǒng)平臺方法

    這篇文章主要介紹了Python中使用異常處理來判斷運行的操作系統(tǒng)平臺方法,這個方法比較新穎,,需要的朋友可以參考下
    2015-01-01
  • PyautoGui常用教程(一篇掌握)

    PyautoGui常用教程(一篇掌握)

    這篇文章主要介紹了PyautoGui常用教程(一篇掌握),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 基于Python數(shù)據(jù)結(jié)構(gòu)之遞歸與回溯搜索

    基于Python數(shù)據(jù)結(jié)構(gòu)之遞歸與回溯搜索

    今天小編就為大家分享一篇基于Python數(shù)據(jù)結(jié)構(gòu)之遞歸與回溯搜索,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python參數(shù)的傳遞幾種情況實例詳解

    Python參數(shù)的傳遞幾種情況實例詳解

    這篇文章主要給大家介紹了關(guān)于Python參數(shù)的傳遞的相關(guān)資料,在Python中傳遞參數(shù)指的是函數(shù)或方法中的參數(shù)傳輸方式,文中給出了詳細的代碼示例,需要的朋友可以參考下
    2023-09-09
  • Python optparse模塊及簡單使用

    Python optparse模塊及簡單使用

    optparse,是一個更夠讓程序設(shè)計人員輕松設(shè)計出簡單明了、易于使用、符合標準的Unix命令例程式的Python模塊,生成使用和幫助信息,這篇文章主要介紹了Python optparse模塊簡單使用,需要的朋友可以參考下
    2022-12-12
  • python入門教程之基本算術(shù)運算符

    python入門教程之基本算術(shù)運算符

    這篇文章主要給大家介紹了關(guān)于python入門教程之基本算術(shù)運算符的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • pytorch 實現(xiàn)凍結(jié)部分參數(shù)訓(xùn)練另一部分

    pytorch 實現(xiàn)凍結(jié)部分參數(shù)訓(xùn)練另一部分

    這篇文章主要介紹了pytorch 實現(xiàn)凍結(jié)部分參數(shù)訓(xùn)練另一部分,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論