swift - Can I use the pattern matching operator ~= to match an enum value to an enum type with an associated variable? -


this question has answer here:

i compare enum value enum type without using switch. following code, example, works using ~= operator:

enum myenum {     case a, b }  let myenum = myenum.a  let isa = myenum ~= myenum.a 

isa equals true above.

however, when try compare enum of enum type associated value, below, compile error binary operator '~=' cannot applied 2 myenum operands.

enum myenum {     case a, b(object: any) }  let myenum = myenum.a  let isa = myenum ~= myenum.a 

is there way work around error use ~= pattern matching operator? or recourse following syntax, in opinion more cumbersome:

enum myenum {     case a, b(object: any) }  let myenum = myenum.a  let isa: bool switch myenum { case .a:     isa = true default:     isa = false } 

thanks in advance input , suggestions!

from documentation swift 1.2 "enumeration case patterns appear in switch statement case labels". yes, need define ~= operator (as answer pointed in comments).

in case need isa , isb can implement them using switch combined _. in case ~= couldn't work out of box anyway, since use any associated type, not equatable (i.e.: how can if 2 .b(any) equal since cannot if 2 equal?)

as example, here implementation of code uses string associated type. in case need isa , isb, can still use any associated type without implementing ~= operator.

enum myenum {     case a, b(object: string) }  let myenuma = myenum.a let myenumb = myenum.b(object: "foo")   func ~=(lhs: myenum, rhs: myenum) -> bool {     switch (lhs, rhs) {     case (.a, .a):         return true     case let (.b(left), .b(right)):         return left == right     default:         return false     } }  myenuma ~= .a   // true myenumb ~= .b(object: "foo") // true myenumb ~= .b(object: "bar") // false  func isa(value: myenum) -> bool {     switch value {     case .a:         return true     default:         return false     } }  func isb(value: myenum) -> bool {     switch value {     case .b(_):     // ignore associated value         return true     default:         return false     } } 

Comments

Popular posts from this blog

c++ - Difference between pre and post decrement in recursive function argument -

php - Nothing but 'run(); ' when browsing to my local project, how do I fix this? -

php - How can I echo out this array? -