首頁 後端開發 Python教學 Swift中的協定(protocol)學習教程

Swift中的協定(protocol)學習教程

Jul 22, 2016 am 08:56 AM
protocol swift 協定

一、引言

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

二、在協定中定義屬性與方法

協定中定義的屬性只約定名稱和類型,在具體類型的實作中,其可以是儲存屬性也可以是計算屬性,協定中還需要指定屬性是可讀的還是可讀可寫的。範例程式碼如下:

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
  }
}
登入後複製

有一點要注意,協定中的可讀並不是唯讀,協定中的屬性約定成可讀可寫,則在實作時,這個屬性必須是可讀可寫的,但是如果協定中約定成可讀的,則此屬性可以是唯讀的也可以是可讀可寫的,看具體的實作。

協定中約定的方法可以是實例方法也可以是型別方法,範例如下:

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)
  }
}
登入後複製

同樣,協定中也可以對構造方法進行定義約定。

三、協定的特點

協定中雖然沒有任何屬性和方法的實現,但是其仍然可以當做類型來使用,在函數參數、返回值中應用廣泛,示例如下:

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()
}
//将协议类型作为参数
func test(param:MyPortocol) {
  param.logName()
}
登入後複製

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

協定可以像其他類型一樣進行繼承,子協定將自動擁有父協定約定的屬性和方法。協定也可以透過class關鍵字來定義只有類別可以遵守,範例如下:

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()
}
//只有类可以继承此协议
protocol MySubPortocol:class,MyPortocol {
  
}
登入後複製

協議既然可以像其他類型一樣進行使用,當然它也可以使用is,as?,as!進行檢查和轉換,關於is,as的更多用法可以查看Swift關於類型轉換的內容。

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

@objc protocol MyPortocol {
  //定义实例属性
  var name:String{get}
  var age:Int{set get}
  var nameAndAge:String{get}
  static var className:String{get}
  func logName()
  //可选实现
  optional static func logClassName()
}
登入後複製

Swift中的協定還有一個十分重要的特性,可以透過擴展來進行屬性、方法以及下標的實作。這對於一些通用類別的方法十分方便,這相當於所有繼承此協定的類別都預設實作了這樣的方法,範例如下:

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"
  }
}
登入後複製

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vivo快充屬於哪個協議 vivo快充屬於哪個協議 Sep 06, 2022 pm 02:43 PM

vivo快充主要有兩個協議:1、「QC 2.0」快充協議,「QC2.0」就是「Quick Charge 2.0」技術,是高通公司發布的快充技術2.0版本,可以輸出5V、9V、12V 、20V四組電壓;2、PD快充協議,是由“USB-IF”組織制定的一種快速充電規範,是目前主流的快充協議之一,可以使目前默認最大功率“5V/2A”的“type-c”介面提高到100W。

pd3.0快充協議最高多少w pd3.0快充協議最高多少w Nov 08, 2022 pm 04:04 PM

pd3.0快充協定最高支援「100W」。 2015年11月,USB PD快充迎來了大版本更新,進入到了USB PD3​​.0快充時代;PD3.0協議支援5V3A、9V3A、12V3A、15V3A、20V5A輸出,最​​大功率可以到100W,不僅可以用在手機充電上,還可以用筆記本或是顯示器供電。

蘋果發布用於同態加密的開源 Swift 軟體包,已部署在 iOS 18 中 蘋果發布用於同態加密的開源 Swift 軟體包,已部署在 iOS 18 中 Jul 31, 2024 pm 01:10 PM

7月31日消息,蘋果昨天(7月30日)發布新聞稿,宣布推出新的開源Swift包(swift-homomorphic-encryption),用於在Swift程式語言中啟用同態加密。註:同態加密(HomomorphicEncryption,HE)是指滿足密文同態運算性質的加密演算法,即資料經過同態加密之後,對密文進行特定的計算,得到的密文計算結果在進行對應的同態解密後的明文等同於明文資料直接進行相同的計算,實現資料的「可算不可見」。同態加密技術可以計算加密數據,而且不會向操作過程洩漏底層的未加

nginx中怎麼設定使用proxy protocol協定 nginx中怎麼設定使用proxy protocol協定 May 18, 2023 am 08:47 AM

proxyprotocol在nginx中應用我們知道nginx是web伺服器和代理伺服器,它一般工作在proxyserver或負載平衡軟體(Haproxy,AmazonElasticLoadBalancer(ELB)的後面。客戶端首先請求proxyserver或LSB負載平衡軟體,然後再到nginx進行真實的web存取。因為經過了多層軟體,所以客戶端的一些資訊例如ip位址,連接埠號碼等可能就會被隱藏,這對於我們問題分析,數據統計都是不利的。因為對於nginx來說,我們希望能夠獲得真實的客戶端

Vue.js與Swift語言的集成,實現高階iOS應用的開發與測試的建議 Vue.js與Swift語言的集成,實現高階iOS應用的開發與測試的建議 Aug 01, 2023 am 09:53 AM

Vue.js是一種流行的JavaScript框架,用於建立使用者介面。而Swift語言是一種用於iOS和macOS應用程式開發的程式語言。在本文中,我將探討如何將Vue.js與Swift語言集成,以實現高級iOS應用程式的開發和測試。在開始之前,我們需要確保你已經安裝了以下軟體和工具:Xcode:用於開發和編譯iOS應用程式的整合開發環境。 Node.js:用於

5種工業通訊協議是什麼 5種工業通訊協議是什麼 Sep 28, 2022 am 11:52 AM

5種工業通訊協議:1、Modbus協議,是應用於電子控制器上的一種通用語言;2、RS-232協議,是一種串行物理接口標準;3、RS-485協議,是在RS232的基礎上發展來的;4、HART協議,是一種用於現場智慧儀表和控制室設備之間的通訊協議;5、MPI協議,是一個跨語言的通訊協議,用於編寫並行電腦。

如何使用MySQL在Swift中實作資料匯入和匯出功能 如何使用MySQL在Swift中實作資料匯入和匯出功能 Aug 01, 2023 pm 11:57 PM

如何使用MySQL在Swift中實作資料匯入和匯出功能匯入和匯出資料是許多應用程式中常見的功能之一。本文將展示在Swift語言中使用MySQL資料庫實作資料匯入和匯出的方法,並提供程式碼範例。要使用MySQL資料庫,首先需要在Swift專案中引入對應的庫檔案。你可以透過在Package.swift檔案中加入以下依賴來實現:dependencies:[

PHP中的SOAP協定指南 PHP中的SOAP協定指南 May 20, 2023 pm 07:10 PM

隨著互聯網技術的不斷發展,越來越多的企業級應用需要向其它應用程式提供介面以實現資料和業務的互動。在這種情況下,我們需要一種可靠的協定來傳輸資料並確保資料的完整性和安全性。 SOAP(SimpleObjectAccessProtocol)是一種基於XML的協議,可用於在Web環境中實現應用程式之間的通訊。而PHP作為一種流行的Web程式語言,

See all articles