Swift 中的多变量赋值
Posted
技术标签:
【中文标题】Swift 中的多变量赋值【英文标题】:Multiple variable assignment in Swift 【发布时间】:2014-11-27 03:06:15 【问题描述】:如何使用 Swift 在一行中分配多个变量?
var blah = 0
var blah2 = 2
blah = blah2 = 3 // Doesn't work???
【问题讨论】:
【参考方案1】:你没有。
这是一种语言功能,可防止赋值返回值的标准不良副作用,如described in the Swift book:
与 C 和 Objective-C 中的赋值运算符不同,Swift 中的赋值运算符本身并不返回值。以下语句无效:
if x = y // this is not valid, because x = y does not return a value
此功能可防止在实际使用等于运算符 (
==
) 时意外使用赋值运算符 (=
)。通过使 ifx = y
无效,Swift 可以帮助您避免代码中的此类错误。
因此,这有助于防止这种极其常见的错误。虽然这种错误可以在其他语言中得到缓解——例如,通过使用Yoda conditions——Swift 设计者显然决定最好在语言级别确定你不能自爆。但这确实意味着您不能使用:
blah = blah2 = 3
如果您急于在一行上进行赋值,您可以使用元组语法,但您仍然必须专门分配每个值:
(blah, blah2) = (3, 3)
...我不会推荐它。虽然一开始可能会觉得不方便,但在我看来,只输入整个内容是最好的方法:
blah = 3
blah2 = 3
【讨论】:
这是一种我觉得一直出现在“早期/年轻”语言中的笨拙的东西。语言之神使编写他们主观上认为令人反感的代码成为不可能(这是一个例子,另一个例子是必须在浮点数前面加上0
[尝试在 swift 中编写 let x = .5
])。
废话 = 3; blah2 = 3;【参考方案2】:
正如公认的答案所说:您可以获得一些更严格的语法,但是您不能在不使用多行的情况下从 a
分配到 b
到 c
(可能是为了安全起见)。下面是一些更简洁的语法示例,可以在一行中声明和分配多个变量:
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)
【讨论】:
你能解释一下上面的代码吗?真的我无法破译它:) 前两行你看懂了吗? @anoo_radha 好的答案在这里:***.com/questions/30541244/… 基本上是被调用方法修改输入参数的一种方式,所以该方法实际上将值推入red
等。
感谢 @Dan Rosenstark 对 inout 参数的引用
很高兴知道,这是可能的。尽管它对我来说看起来一点也不好看;-)以上是关于Swift 中的多变量赋值的主要内容,如果未能解决你的问题,请参考以下文章