優れたブログの投稿に続いて、https://appventure.me/2015/08/20/swift-pattern-matching-in-detail/#sec-3-7私はカスタムパターンマッチングを試みました。Swift 2.2でのカスタムパターンのマッチングが期待通りに機能しない
enum LineType : String {
case Event = "event:"
case Data = "data:"
}
次に、文字列に1つまたはLineType
の他の値で始まる場合は伝えることのできるString
拡張子::のは、文字列のenum
表す2つの種類を定義してみましょう
extension String {
func isOfType(type: LineType) -> Bool {
return self.hasPrefix(type.rawValue)
}
}
そして、カスタムパターン文字列が指定された型であるかどうかをチェックします。
func ~= (pattern: LineType, value: String) -> Bool {
return value.isOfType(pattern)
}
最後に、この例でテストしてみましょうル:
let testLine = "event:yada-yada-yada"
switch testLine {
case _ where testLine.characters.count == 0:
print("Empty")
case LineType.Event: // <--- Causes the error Enum case 'Event' is not a member of type 'String'
print("Event")
case LineType.Data: // <--- Causes the error Enum case 'Data' is not a member of type 'String'
print("Data")
default:
print("Unknown Type")
}
だから、誰かが...私が間違って何をすべきか、事前に
感謝を私に伝えることができます。
バグのように見えますが、パターンが列挙型の場合はコンパイルできません。 –
@MartinR case {LineType.Event}():print( "Event")は問題を解決します...定数をよりよく定義するe = LineType.Event; ...場合e:... – user3441734