habe ich versucht, diesemehrdeutige Verwendung von Operator '>'
simple2 = {s1, s2 in s1 > s2}
und
var simple2 = {$0 > $1}
aber mich noch
swift 3 Schließung mehrdeutige Verwendung zeigt 'Operator>'
habe ich versucht, diesemehrdeutige Verwendung von Operator '>'
simple2 = {s1, s2 in s1 > s2}
und
var simple2 = {$0 > $1}
aber mich noch
swift 3 Schließung mehrdeutige Verwendung zeigt 'Operator>'
Die Closu re muss explizit den Typ der s1
und s2
Parameter erklären und dieser Typ muss >
Operator implementieren. Der typische Weg dazu besteht darin, die Signatur dieses Abschlusses sicherzustellen, dass die beiden Parameter (a) vom selben Typ sind; und (b) dem Protokoll Comparable
entsprechen.
Wenn Sie simple2
wollen jedeComparable
Art zu nehmen, anstatt einen Verschluss, könnten Sie eine generische Funktion definieren:
func simple2<T: Comparable>(_ s1: T, _ s2: T) -> Bool {
return s1 > s2
}
Dann könnten Sie es mit jedem Comparable
Typ nennen.
Sie müssen angeben y die Typen s1
und s2
und $0
und $1
. Nicht einmal ein Mensch kann schlussfolgern, aus welchem Typ diese stammen sollen, geschweige denn den Swift-Compiler.
>
kann auf mehrere Typen angewendet werden. Hier sind einige Beispiele:
Int
und Int
Double
und Double
CGFloat
und CGFloat
Sie die Typen wie folgt angeben:
let simple2: (Int, Int) -> Bool = {$0 > $1}
ich dachte Xcode ist mehr als Smart xD –
@EkramulHoque Wie würde es wissen? Nicht einmal ich weiß, ob du Ints, Strings oder irgendetwas anderes vergleichen willst – Alexander
Die Typen sind wahrscheinlich nicht klar genug. Es weiß nicht, welche Überladung zu verwenden ist. Versuchen Sie, Typ Anmerkungen oder was auch immer Swift verwendet. – Carcigenicate