2017-09-23 1 views
2

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>'

+1

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

Antwort

0

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.

1

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} 
+0

ich dachte Xcode ist mehr als Smart xD –

+2

@EkramulHoque Wie würde es wissen? Nicht einmal ich weiß, ob du Ints, Strings oder irgendetwas anderes vergleichen willst – Alexander

Verwandte Themen