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
   

此功能可防止在实际使用等于运算符 (==) 时意外使用赋值运算符 (=)。通过使 if x = 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 分配到 bc (可能是为了安全起见)。下面是一些更简洁的语法示例,可以在一行中声明和分配多个变量:

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 中的多变量赋值的主要内容,如果未能解决你的问题,请参考以下文章

将值从闭包赋值给变量 Swift

关于swift中的常量和变量

typescript变量定义

浅谈python中的变量赋值

Swift中的Optional类型 (可选类型)与强制解包 ? !

如何为“仅获取”的变量赋值?