Swift 中的where子句详解

where子句是Swift中的一个非常实用的语法,可以更精确地定义类型约束、条件判断等逻辑。

定义类型约束

where子句可以在泛型定义中指定更多类型约束条件:

func findIndex<T>(of value: T, in array: [T]) -> Int? 
    where T: Equatable {

    for (index, item) in array.enumerated() {
        if item == value {
            return index
        }
    }

    return nil
}

这里的where子句限定了T必须遵循Equatable协议。

条件判断

在条件判断逻辑中可以使用where子句增强表达式:

let numbers = [1, 2, 3, 4]

let evenNumbers = numbers.filter { number in 
    where number % 2 == 0 
    return true
}

这里只过滤出可以被2整除的偶数。

排序

在数组排序时where可以提供排序条件:

let products = [["name": "egg", "price": 5], ["name": "milk", "price": 3]]

let sorted = products.sorted { $0["price"] > $1["price"] } 
    where $0["price"] != $1["price"]

总结

where子句为Swift提供了更丰富的语法,可以编写出更清晰、精准的逻辑判断,发挥语言的最大价值。熟练掌握where的用法,可以让我们的Swift代码达到更高的水准。