2014-10-02 49 views

回答

50

你不知道。這是一個語言功能,以防止分配的標準不需要的副作用返回一個值,爲described in the Swift book

不像C和Objective-C的賦值運算符,在斯威夫特賦值操作符本身不返回值。下面的語句是無效的:

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

此功能可防止賦值運算符(=)從正在使用的事故時,等於運算符(==)實際上是意圖。通過使x = y無效,Swift可以幫助您避免代碼中出現這些類型的錯誤。

因此,這有助於防止這種極其常見的錯誤。儘管在其他語言中可以減輕這種錯誤 - 例如,通過使用Yoda conditions,Swift設計人員顯然決定,在語言層面確定最好的方法是讓自己無法在腳下自己拍攝。但它確實意味着你不能使用:

blah = blah2 = 3 

如果你不顧一切地做一個行分配,你可以使用元組的語法,但你仍然必須專門分配給每個值:

(blah, blah2) = (3, 3) 

...我不會推薦它。雖然它可能會覺得不方便起初,只是打字整個事情出來是最好的方式,在我看來:

blah = 3 
blah2 = 3 
+2

這是一種笨拙的東西,我所有的時間感覺就像出現在「早/年輕」的語言。語言的神使它不可能寫出他們主觀上認爲令人討厭的代碼(這是一個例子,另一個例子是用'0'前綴'浮動'的必要性[試着快速寫'let x = .5'])。 – dave 2016-04-10 19:48:16

+2

blah = 3; blah2 = 3; – 2016-07-18 17:41:10

2

作爲公認的答案說:你可以得到一些更嚴格的語法,但你不能從分配abc而不使用多行(爲了安全,可能)。下面是一些更簡潔的語法在一行中聲明和分配多個變量的一個例子:

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

請你解釋一下上面的代碼。真的我不能破譯它:) – 2017-09-29 14:54:32

+0

你瞭解前兩行嗎? – 2017-09-30 21:12:41

+0

是的...得到了聲明和任務。 – 2017-10-02 13:04:14