2016-05-07 7 views
1

Ich habe einen Ausdruck geschrieben, der die größte von zwei Variablen findet und true zurückgibt, wenn sie gleich oder größer als eine Grenzwertvariable ist. Sie sind alle Ganzzahlen.Swift: Warum scheitert dieser gültige Ausdruck in ternärer Form?

 if max(num1, num2) >= limit { 
      result = 3 
     } else { 
      result = 2 
     } 

das funktioniert gut, aber wenn ich versuche, es in dem kompakteren ternären Format um es mit abgelehnt wird: ‚nicht finden konnte eine Überlastung für‚> =‘, die die angegebenen Argumente akzeptiert‘.

max(num1, num2) >= limit ? result = 3 : result = 2 

Ich habe versucht, die bedingten in verschiedenen Bracket-Konfigurationen, aber es schlägt immer noch fehl. Irgendwelche Ideen?

Weitere Experimente zeigen, dass das Problem an der Grenze zusammenhängt var als implizit ungeöffneten Variable gesetzt werden, obwohl dies in der Init-Block festgelegt ist:

limit: Int! 

init (num: Int) { 
limit = num 
} 

Vielen Dank. Kw

Antwort

4

Das Problem hierbei Vorrang wird, sollte es "Arbeit" wenn Sie

geschrieben
max(num1, num2) >= limit ? (result = 3) : (result = 2) 
//          ^  ^

Beachten Sie die Priorität der einzelnen Betreiber:

  • ?:: Assoziativität Recht Vorrang 100 (higherThan: AssignmentPrecedence)
  • =: Assoziativität rechte Priorität 90

so a ? b : c = d wird als (a ? b : c) = d ausgewertet, da der ternäre Bedingungsoperator eine höhere Priorität als die Zuweisung hat.

Hier in max(num1, num2) >= limit ? result = 3 : result, der Art der result = 3 ist () und result Int ist, so gibt es eine Typübereinstimmung zwischen den beiden Armen und verursacht Fehler.

(aber ich bin nicht sicher, warum die Nachricht über >= spricht, überprüfen Sie bitte, ob Ihr num1 und num2 sind auch Int.)


Das heißt, es ist sehr unkonventionelle (dh schlechter Stil) um eine Aufgabe in eine ?: zu setzen, normalerweise möchten Sie dies stattdessen schreiben:

result = max(num1, num2) >= limit ? 3 : 2 
+0

Vielen Dank für Ihre informative Antwort, sehr hilfreich – Kwangle

Verwandte Themen