逃避Swift中

时间:2017-02-09 01:16:26

标签: swift generics operator-overloading operators currying

如何在Swift中存储用于评估运算符的函数的函数?

Int.<Int.`<`似乎都没有为我编译。

对于字母数字函数名称,这很好用:

extension Comparable {
    static func lessThan(_ lhs: Self, _ rhs: Self) -> Bool {
        return lhs < rhs
    }
}

let comparator = Int.lessThan

我知道我可以创建一个这样的新闭包,但我觉得必须有更优雅的方式:

let comparator: (Int, Int) -> Bool = {
    return $0 < $1
}

请注意<实际上是Swift 3中Comparable的静态函数,而顶级运算符<只是它的包装:

public protocol Comparable : Equatable {
    ...
    public static func <(lhs: Self, rhs: Self) -> Bool
    ...
}

1 个答案:

答案 0 :(得分:1)

在其周围放置括号

let comparator: (Int, Int) -> Bool = (<)