To bring a little bit more context: I copied this Regex library in my project which had StringLiteralConvertible and implemented the pattern matching operator and all of a sudden, ALL init(rawValue: String) calls of completely unrelated enums started returning unexpected values. If I did not have unit tests, I probably would not have found out about it for a while.
I understand the mechanism which calls StringLiteralConvertible's init(stringLiteral) under the hood: let a: SomeStringLiteralConvertibleType = "hello" I also understand the magic in the pattern matching operator. But I don't understand why when associating them together: func ~=(lhs: SomeStringLiteralConvertibleType, rhs: String) -> Bool { return false } Then creates his behaviour in all Enums with String raw values: enum MyEnum: String { case Super = "super" } let a = MyEnum(rawValue: "super") // nil I can't figure out if this is just a confusing behaviour of Swift, in which case I want to write a proposal to make it less confusing, or if it is a big with Swift, in which case I should open a bug report. David > On 05 Jan 2016, at 18:26, David Hart via swift-users <swift-us...@swift.org> > wrote: > > How is it that Swift allows code like this: > > struct Sneaky: StringLiteralConvertible { > init(stringLiteral value: String) {} > init(extendedGraphemeClusterLiteral value: String) {} > init(unicodeScalarLiteral value: String) {} > } > > func ~=(sneaky: Sneaky, string: String) -> Bool { > return false > } > > enum NormalEnum: String { > case Super = "super" > case Mario = "mario" > } > > let value = NormalEnum(rawValue: "super”) // return nil!!!! > > It hit completely by surprise today because of of a Regex library: > > struct Regex: StringLiteralConvertible { > init(stringLiteral value: String) {} > init(extendedGraphemeClusterLiteral value: String) {} > init(unicodeScalarLiteral value: String) {} > > //... > } > > func ~=(regex: Regex, string: String) -> Bool { > return regex.matches(string) > } > > If I was not already a Swift enthusiast, this behaviour would have left me > completely dumbfounded. > What can we do about it? > > David. > > _______________________________________________ > swift-users mailing list > swift-us...@swift.org > https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution