模式匹配特性類似于正則表達(dá)式的匹配
// 重載 ~= ,使它接受一個 NSRegularExpression 作為模式等孵,去匹配輸入的 String
func ~=(pattern: NSRegularExpression, input: String) -> Bool {
return pattern.numberOfMatches(in: input,
options: [],
range: NSRange(location: 0, length: input.characters.count)) > 0
}
// 為了簡便,再添加一個將字符串轉(zhuǎn)換為 NSRegularExpression 的操作符
// 定義“前位”操作符
prefix operator ~/
// 定義操作符
prefix func ~/(pattern: String) throws -> NSRegularExpression? {
do {
return try NSRegularExpression(pattern: pattern, options: [])
}catch _ {
assertionFailure()
return NSRegularExpression()
}
}
let contact = ("http://onevcat.com", "onev@onevcat.com")
let mailRegx: NSRegularExpression
let siteRegx: NSRegularExpression
mailRegx = try ~/"^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$"
siteRegx = try ~/"^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$"
switch contact {
case (siteRegx, mailRegx): print("同時擁有有效的網(wǎng)站和郵箱")? // 這里輸出
case (_, mailRegx):print("只擁有有效的郵箱")
case (siteRegx, _):print("只擁有有效的網(wǎng)站")
default:print("嘛都沒有")
}