Zap*_*hod 6 pattern-matching switch-statement ios swift swift2
按照优秀的博客文章:https://appventure.me/2015/08/20/swift-pattern-matching-in-detail/#sec-3-7我尝试过自定义模式匹配.让我们定义一个enum代表两种字符串:
enum LineType : String {
case Event = "event:"
case Data = "data:"
}
Run Code Online (Sandbox Code Playgroud)
接下来,一个String扩展能够告诉字符串是否以以下一个或另一个值开头LineType:
extension String {
func isOfType(type: LineType) -> Bool {
return self.hasPrefix(type.rawValue)
}
}
Run Code Online (Sandbox Code Playgroud)
然后是自定义模式匹配函数,检查字符串是否属于给定类型:
func ~= (pattern: LineType, value: String) -> Bool {
return value.isOfType(pattern)
}
Run Code Online (Sandbox Code Playgroud)
最后,让我们用这个例子来测试它:
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")
}
Run Code Online (Sandbox Code Playgroud)
所以如果有人能告诉我我做错了什么......
提前致谢.
switch testLine {
case _ where testLine.characters.count == 0:
print("Empty")
case _ where testLine.isOfType(.Event): print("Event")
case _ where testLine.isOfType(.Data): print("Data")
default: print("Unknown Type")
}
/* prints
Event
*/
Run Code Online (Sandbox Code Playgroud)
不过,尝试重新安排它......
看起来很糟糕,但这确实有效,正如预期的那样
enum LineType : String {
case Event = "event:"
case Data = "data:"
}
func ~= (pattern: LineType, value: String) -> Bool {
return value.hasPrefix(pattern.rawValue)
}
let testLine = "event:yada-yada-yada"
let e = LineType.Event
let d = LineType.Data
switch testLine {
case let s where s.characters.count == 0: print("Empty")
case e: print("Event")
case d: print("Data")
default: print("Unknown Type")
}
/* prints
Event
*/
Run Code Online (Sandbox Code Playgroud)
这也应该有效
...
case { return LineType.Event }(): print("Event")
...
Run Code Online (Sandbox Code Playgroud)
或者
...
case { LineType.Event }(): print("Event")
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |