我试过这个
simple2 = {s1, s2 in s1 > s2}
和
var simple2 = {$0 > $1}
但仍然向我显示
swift 3关闭模糊使用'运算符>'
答案 0 :(得分:2)
闭包必须显式声明s1
和s2
参数的类型,并且该类型必须实现>
运算符。这样做的典型方法是使该闭包的签名确保两个参数是(a)相同的类型; (b)符合Comparable
协议。
如果您希望simple2
使用任何 Comparable
类型,而不是闭包,则可以定义通用函数:
func simple2<T: Comparable>(_ s1: T, _ s2: T) -> Bool {
return s1 > s2
}
然后您可以使用任何Comparable
类型调用它。
答案 1 :(得分:1)
您需要指定s1
和s2
以及$0
和$1
的类型。即使是人类也无法推断出你想要的类型,更不用说Swift编译器了。
>
可以应用于多种类型。以下是一些示例:
Int
和Int
Double
和Double
CGFloat
和CGFloat
您可以指定如下类型:
let simple2: (Int, Int) -> Bool = {$0 > $1}