Swift开发实战

enum中如何实现Equatable协议

2015-10-05  本文已影响794人  sprint

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

上一篇下一篇

猜你喜欢

热点阅读