2014-10-02 12 views

risposta

50

Non è così. Questa è una caratteristica del linguaggio per evitare che lo standard indesiderato effetto collaterale di assegnazione restituire un valore, come described in the Swift book:

differenza l'operatore di assegnamento in C e Objective-C, l'operatore di assegnamento a Swift non si restituisce un valore . La seguente dichiarazione non è valida:

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

Questa caratteristica impedisce l'operatore di assegnazione (=) venga utilizzato per caso quando l'operatore uguale (==) è effettivamente destinato. Rendendo invalido se x = y, Swift ti aiuta a evitare questo tipo di errori nel codice.

Quindi, questo aiuta a prevenire questo errore estremamente comune. Mentre questo tipo di errore può essere mitigato in altre lingue, ad esempio usando Yoda conditions, i designer di Swift hanno deciso che era meglio accertarsi a livello linguistico che non si potesse sparare ai piedi. Ma significa che non è possibile utilizzare:

blah = blah2 = 3 

Se siete disperati per fare l'assegnazione su una linea, è possibile utilizzare la sintassi tuple, ma si sarebbe ancora necessario assegnare specificamente ogni valore:

(blah, blah2) = (3, 3) 

... e non lo consiglio. Anche se può sentirsi scomodo in un primo momento, semplicemente digitando il tutto fuori è il modo migliore per andare, a mio parere:

blah = 3 
blah2 = 3 
+2

Questo è il tipo di roba pesante che mi sento come appare in lingue "early/giovani" per tutto il tempo. Gli dei del linguaggio rendono impossibile scrivere codice che soggettivamente trova discutibile (essendo questo un esempio, un altro è la necessità di anteporre float a '0' [prova a scrivere' let x = .5' in swift]). – dave

+2

blah = 3; blah2 = 3; –

2

come la risposta accettata dice: È possibile ottenere una sintassi più stretto, tuttavia, non è possibile assegnare da a a b a c senza utilizzare più righe (per sicurezza, probabilmente). Ecco un esempio di una sintassi più concisa di dichiarare e assegnare più variabili in una sola riga:

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

Potrebbe per favore spiegare il codice sopra. davvero non potevo decifrarlo :) –

+0

Hai capito le prime due righe? –

+0

sì ... ha ottenuto la dichiarazione e l'incarico. –