模糊地使用运算符'''

时间:2017-09-23 17:02:07

标签: swift closures

我试过这个

simple2 = {s1, s2 in s1 > s2}

var simple2 = {$0 > $1}

但仍然向我显示

  

swift 3关闭模糊使用'运算符>'

2 个答案:

答案 0 :(得分:2)

闭包必须显式声明s1s2参数的类型,并且该类型必须实现>运算符。这样做的典型方法是使该闭包的签名确保两个参数是(a)相同的类型; (b)符合Comparable协议。

如果您希望simple2使用任何 Comparable类型,而不是闭包,则可以定义通用函数:

func simple2<T: Comparable>(_ s1: T, _ s2: T) -> Bool {
    return s1 > s2
}

然后您可以使用任何Comparable类型调用它。

答案 1 :(得分:1)

您需要指定s1s2以及$0$1的类型。即使是人类也无法推断出你想要的类型,更不用说Swift编译器了。

>可以应用于多种类型。以下是一些示例:

  • IntInt
  • DoubleDouble
  • CGFloatCGFloat

您可以指定如下类型:

let simple2: (Int, Int) -> Bool = {$0 > $1}