【发布时间】:2016-03-31 21:09:14
【问题描述】:
关注这里的优秀博文:https://appventure.me/2015/08/20/swift-pattern-matching-in-detail/#sec-3-7 我已经尝试过自定义模式匹配。让我们定义一个代表两种字符串的enum:
enum LineType : String {
case Event = "event:"
case Data = "data:"
}
接下来,String 扩展能够判断字符串是否以 LineType 的一个或另一个值开头:
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") 解决问题...或者更好地定义常量 let e = LineType.Event; ...案例e:...
标签: ios swift swift2 switch-statement pattern-matching