/* where 的使用场合:
1>在 switch 语句中,来限定某些条件的 case, 下面例子是 模式匹配的标准写法 */let name = ["王小二", "张三", "李四", "王二小"]name.forEach{ switch $0 { case let x where x.hasPrefix("王"): print("\(x)是笔者本家") default: print("你好,\($0)") }}/* 王小二是笔者本家 你好,张三 你好,李四 王二小是笔者本家 *//*
2 for 循环中做类似的条件限定
*
/let num : [Int?] = [48, 99, nil
]let n = num.flatMap{ $0 }
print(n)
for score in n where score > 60 {
print("及格了 \(score)")}
num.forEach{
if let score = $0, score > 60 {
print("及格了 \(score)")
} else {
print(":(")
}
}
// 上面的代码在 swift3 中改动成了,去掉了where , 变得更加准确表达。 但是有些场合,值有使用 where 才能准确表达。例如
class MyClassA {}
let a : String = "1bc"
let b = a
if a != b { }
// < 小于号的定义 要求 T.RawValue 必须实现 Comparable 协议
// public func <(lhs: T, rhs: T) -> Bool
// 3. 在 扩展协议的时候,我们希望一个协议扩展的默认实现只有在某些特定的条件下使用。
// 比如 下面的扩展定义
//extension Sequence where Self.Iterator.Element : Comparable {
// public func sorted() -> [Self.Iterator.Element]
//}
// 对 Seguence 协议进行扩展,条件是,里面的元素实现 Comparable 协议,扩展的方法 sorted
// 例如
let sortableArray : [Int] = [3,1,2,4,5]
let unsortableArray: [Any?] = ["Hello", 4, nil]
sortableArray.sorted()
unsortableArray.sorted() // 编译错误
网友评论