2014-10-02 48 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