2017-09-23 124 views
2

我想这暧昧使用运营商的 '>'

simple2 = {s1, s2 in s1 > s2} 

var simple2 = {$0 > $1} 

,但仍表现出我

SWIFT 3封不明确使用 '运营商>'

+1

这些类型可能不够清晰。它不知道使用哪个超载。尝试添加类型注释或任何Swift使用。 – Carcigenicate

回答

0

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

如果你想simple2采取任何Comparable类型,而不是关闭,你可以定义一个通用的功能:

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

然后,你可以与任何类型Comparable调用它。

1

您需要指定y s1s2$0$1的类型。甚至连人都不能推断出你想要的是什么类型,更不用说Swift编译器了。

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

  • IntInt
  • DoubleDouble
  • CGFloatCGFloat

您可以指定类型是这样的:

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

我认为Xcode不仅仅是智能xD –

+2

@EkramulHoque它会如何知道?即使我知道你是否想要比较整数,字符串或其他任何东西 – Alexander