2014-10-02 3 views

Antwort

50

Sie nicht. Dies ist eine Sprache-Funktion der Standard unerwünschte Nebenwirkung der Zuweisung einen Wert zurückgeben, wie described in the Swift book zu verhindern:

Im Gegensatz zu dem Zuweisungsoperator in C und Objective-C, der Zuweisungsoperator in Swift nicht selbst einen Wert zurückgeben . Die folgende Anweisung ist nicht gültig:

if x = y { 
     // this is not valid, because x = y does not return a value 
    } 

Diese Funktion verhindert, dass der Zuweisungsoperator (=) aus zufällig verwendet werden, wenn die gleich Operator (==) tatsächlich gedacht. Wenn Swift die x = y ungültig macht, hilft es Ihnen, diese Art von Fehlern in Ihrem Code zu vermeiden.

Dies hilft also, diesen extrem häufigen Fehler zu verhindern. Während diese Art von Fehlern in anderen Sprachen gemildert werden kann - zum Beispiel durch die Verwendung von Yoda conditions - haben die Swift-Designer anscheinend entschieden, dass es besser ist, auf dem Sprachniveau sicher zu stellen, dass man sich nicht selbst in den Fuß schießen kann. Aber es bedeutet, dass Sie nicht verwenden können:

blah = blah2 = 3 

Wenn Sie verzweifelt sind auf einer Linie, die die Zuordnung zu tun, könnten Sie Tuple-Syntax verwenden, aber Sie würden immer noch gezielt jeden Wert zuweisen:

(blah, blah2) = (3, 3) 

... und ich würde es nicht empfehlen. Während es anfangs unbequem fühlen, nur das Ganze Eingabe aus ist der beste Weg zu gehen, meiner Meinung nach:

blah = 3 
blah2 = 3 
+2

Dies ist die Art von plumpen Sachen, die ich wie erscheint das Gefühl, in „early/young“ Sprachen die ganze Zeit. Die Götter der Sprache machen es unmöglich, Code zu schreiben, den sie subjektiv als anstößig empfinden (dies ist ein Beispiel, ein anderer ist die Notwendigkeit, Gleitkommazahlen mit "0" voranzutreiben [versuche, "Let x = .5" in swift]). – dave

+2

blah = 3; blah2 = 3; –

2

Da die akzeptierte Antwort, sagt: Sie können etwas straffer Syntax erhalten, jedoch können Sie nicht zuweisen aus a zu b zu c ohne mehrere Zeilen (für Sicherheit, wahrscheinlich). Hier ist ein Beispiel einiger prägnanter Syntax zu erklären und mehrere Variablen in einer Zeile zuweisen:

var red, green, blue, alpha : CGFloat 
(red, green, blue, alpha) = (0.0, 0.0, 0.0, 0.0) 
ledColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha) 
+0

Könnten Sie bitte den obigen Code erklären. wirklich konnte ich es nicht entziffern :) –

+0

Hast du die ersten zwei Zeilen verstanden? –

+0

ja ... habe die Deklaration und Zuordnung bekommen. –