美文网首页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