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