swift中的Hashable、Codable、Equatable

swift標(biāo)準(zhǔn)庫(kù)為我們提供了大量的協(xié)議,使用這些協(xié)議可以讓我們的程序更加高效。同時(shí)我們也可以從Apple官方實(shí)現(xiàn)的協(xié)議中學(xué)習(xí),從而寫(xiě)出更好的swift程序以及按照自己的需求自定義一個(gè)協(xié)議。(更多可了解面向協(xié)議編程

常用的幾個(gè)協(xié)議

Hashable : 可哈?;?/strong>

  • Hashable繼承于Equatable協(xié)議
  • 在標(biāo)準(zhǔn)庫(kù)中,大部分基本類型都是遵循Hashable協(xié)議的,如Int、String等
  • 使用DictionarySet等數(shù)據(jù)結(jié)構(gòu)時(shí),要求作為Key的類型要實(shí)現(xiàn)Hashable協(xié)議
  • 在swift4.2之后,如果一個(gè)struct中包含的數(shù)據(jù)類型是基本類型,那么在使它遵循Hashable時(shí)編譯器會(huì)自動(dòng)為它生成一組==hash(into:)函數(shù)。
  •   //如果想自己實(shí)現(xiàn)hash函數(shù),大多數(shù)情況下這樣就可以
      func hash(into hasher: inout Hasher) {
          hasher.combine(xxx)
          hasher.combine(xxx)
      }
    

Codable : 可以轉(zhuǎn)解碼

  • Codable 實(shí)際上是由Encodable & Decodable 組成
  • 遵循Codable協(xié)議的對(duì)象會(huì)自動(dòng)實(shí)現(xiàn)Encodable & Decodable
  • Decodable協(xié)議定義了一個(gè)初始化函數(shù):init(from decoder: Decoder) throws
  • Encodable協(xié)議定義了一個(gè)方法:func encode(to encoder: Encoder) throws
  • 使用遵循Codinkey協(xié)議的一個(gè)enum可以自定義要解析的鍵值名
  • Codable的主要使用場(chǎng)景是將JSON數(shù)據(jù)解析為模型數(shù)據(jù),需要將要解析的內(nèi)容設(shè)置成可選型,否則如果JSON中某數(shù)據(jù)為空的話將會(huì)解析失敗。
  • 解析數(shù)據(jù)時(shí)只需要使用一個(gè)JSONDecoder實(shí)例,調(diào)用它的decode的方法就可以實(shí)現(xiàn)解析。如let student = try JSONDecoder().decode(Student.self,from: json)

Equatable : 可比較

  • 基本數(shù)據(jù)類型默認(rèn)實(shí)現(xiàn)了Equatable
  • 要讓自定義類型實(shí)現(xiàn)Equatable的話,可以使用extension,在extension中遵循Equatable協(xié)議,并且實(shí)現(xiàn)需要的例如==等方法
  • Comparable協(xié)議類似

TINO WU

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift 4.0后引入的特性,目標(biāo)是取代NSCoding協(xié)議。對(duì)結(jié)構(gòu)體,枚舉和類都支持,能夠把JSON這種弱類型...
    HotPotCat閱讀 3,041評(píng)論 0 15
  • 原創(chuàng):知識(shí)點(diǎn)總結(jié)性文章創(chuàng)作不易,請(qǐng)珍惜,之后會(huì)持續(xù)更新,不斷完善個(gè)人比較喜歡做筆記和寫(xiě)總結(jié),畢竟好記性不如爛筆頭哈...
    時(shí)光啊混蛋_97boy閱讀 59評(píng)論 0 2
  • if case let 首先,一個(gè)用到數(shù)據(jù)綁定的switch語(yǔ)法是這樣的。 if case let其實(shí)和switc...
    小笨憨閱讀 500評(píng)論 1 1
  • 前言 在使用OC的項(xiàng)目中,對(duì)于網(wǎng)絡(luò)請(qǐng)求獲取json數(shù)據(jù),然后進(jìn)行解析成的自定義模型我們通常會(huì)用MJExtensio...
    Leesim閱讀 3,819評(píng)論 3 14
  • 夜鶯2517閱讀 128,136評(píng)論 1 9

友情鏈接更多精彩內(nèi)容