where的使用场合

在switch语句中,我们可以使用where来限定某些条件case

let name = ["王小二","张三","李四","王二小"]
name.forEach {
    switch $0 {
    case let x where x.hasPrefix("王"):
        print("\(x)是笔者本家")
    default:
        print("你好,\($0)")
    }
}

在if let中也可以使用where来做类似的条件限定,不过现在在if let中where已经被逗号取代了

let nums: [Int?] = [48,99,nil]
nums.forEach {
    if let score = $0, score > 60 {
        print("及格啦 ~ \(score)")
    } else {
        print(":(")
    }
}

在for中可以使用where来做类似的条件限定

let nums2 = [48,99,50]
for score in nums2 where score > 60 {
    print("及格啦 ~ \(score)")
}

在泛型中对方法的类型进行限定时

public func !=(lhs: T, rhs: T) -> Bool where T.RawValue: Equatable {
    return lhs.rawValue != rhs.rawValue
}

有些时候,我们会希望一个接口扩展的默认实现只是在某些特定条件下适用,这个可以使用where关键字

extension Sequence where Self.Iterator.Element: Comparable {
    public func sort() -> [Self.Iterator.Element] {
        //……
    }
}

小结如下:
where的使用场合

  • 在Switch语句中,可以使用where来限定某些条件case
  • 在for中也可以使用where来做类似的条件限定
  • 有一些场合是只有使用where才能准确表达的,比如在泛型中想要对方法的类型进行限定时。
  • 有些时候,我们希望一个接口扩展的默认实现只在某些特定的条件下适用,这是就可以使用where关键字。

你可能感兴趣的:(where的使用场合)