enum中如何实现Equatable协议

对于基本的enum类型swift默认实现了

func ==<T:RawRepresentable where T.RawValue:Equatable>(lhs:T,rhs:T)->Bool

所在基本的枚举类型无需实现==就可以就行比较,但是对于非基本enum的 需要重写==运算符。

比如下面的代码:

enum BarCode {

  case UPCA(Int,Int)

  case QRCode(String) 

  case None

}

//// Error: binary operator '==' cannot be applied to two Barcode operands

Barcode.QRCode("code")==Barcode.QRCode("code") //这句会编译出错

这时候就需要你去实现Equatable协议 并重写==运算符

extensionBarcode:Equatable { 

}

  func==(lhs:Barcode,rhs:Barcode)->Bool {

      switch(lhs,rhs) {

          case(let.UPCA(codeA1,codeB1),let.UPCA(codeA2,codeB2)):

              return codeA1==codeA2 && codeB1==codeB2

           case(let.QRCode(code1),let.QRCode(code2)):

                return code1==code2

             case(.None,.None):

                   return true

              default:

                  return false

     }

}


Barcode.QRCode("code")==Barcode.QRCode("code") //  true

Barcode.UPCA(1234,1234)==Barcode.UPCA(4567,7890)// false

Barcode.None==Barcode.None// true

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容