我想這曖昧使用運營商的 '>'
simple2 = {s1, s2 in s1 > s2}
和
var simple2 = {$0 > $1}
,但仍表現出我
SWIFT 3封不明確使用 '運營商>'
我想這曖昧使用運營商的 '>'
simple2 = {s1, s2 in s1 > s2}
和
var simple2 = {$0 > $1}
,但仍表現出我
SWIFT 3封不明確使用 '運營商>'
的瓶蓋re必須明確聲明參數s1
和s2
的類型,並且該類型必須實現>
運算符。做這件事的典型方法是使該封閉的簽名確保這兩個參數是(a)相同的類型;和(b)符合Comparable
協議。
如果你想simple2
採取任何Comparable
類型,而不是關閉,你可以定義一個通用的功能:
func simple2<T: Comparable>(_ s1: T, _ s2: T) -> Bool {
return s1 > s2
}
然後,你可以與任何類型Comparable
調用它。
您需要指定y s1
和s2
和$0
和$1
的類型。甚至連人都不能推斷出你想要的是什麼類型,更不用說Swift編譯器了。
>
可應用於多種類型。下面是一些例子:
Int
和Int
Double
和Double
CGFloat
和CGFloat
您可以指定類型是這樣的:
let simple2: (Int, Int) -> Bool = {$0 > $1}
我認爲Xcode不僅僅是智能xD –
@EkramulHoque它會如何知道?即使我知道你是否想要比較整數,字符串或其他任何東西 – Alexander
這些類型可能不夠清晰。它不知道使用哪個超載。嘗試添加類型註釋或任何Swift使用。 – Carcigenicate