2017-09-23 62 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