美文网首页Swift开发实战
enum中如何实现Equatable协议

enum中如何实现Equatable协议

作者: sprint | 来源:发表于2015-10-05 09:42 被阅读794次

对于基本的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

相关文章

网友评论

  • 聆听下雨的声音:请问枚举里面的枚举类型case UPCA(Int,Int) case QRCode(String) 这俩项分别是什么类型?函数?

本文标题:enum中如何实现Equatable协议

本文链接:https://www.haomeiwen.com/subject/sgbgcttx.html