Swift中的多个变量赋值

ham*_*obi 36 variables variable-assignment swift

如何使用Swift在一行中分配多个变量?

    var blah = 0
    var blah2 = 2

    blah = blah2 = 3  // Doesn't work???
Run Code Online (Sandbox Code Playgroud)

Mat*_*son 68

你没有.

这是一种语言功能,可以防止返回值的赋值的标准不需要的副作用,如Swift书中所述:

与C和Objective-C中的赋值运算符不同,Swift中的赋值运算符本身不返回值.以下声明无效:

   if x = y {
       // this is not valid, because x = y does not return a value
   }
Run Code Online (Sandbox Code Playgroud)

此功能可防止在实际=使用等于operator(==)时意外使用赋值运算符().通过使if x = y无效,Swift可以帮助您避免代码中的这类错误.

因此,这有助于防止这种极其常见的错误.虽然这种错误可以在其他语言中得到缓解 - 例如,通过使用Yoda条件 - Swift设计师显然认为最好在语言层面确定你不能用脚射击自己.但它确实意味着你不能使用:

blah = blah2 = 3
Run Code Online (Sandbox Code Playgroud)

如果你急于在一行上进行赋值,你可以使用元组语法,但你仍然必须专门分配每个值:

(blah, blah2) = (3, 3)
Run Code Online (Sandbox Code Playgroud)

......我不推荐它.虽然起初可能会感到不方便,但在我看来,只需输入整个内容就是最好的方法:

blah = 3
blah2 = 3
Run Code Online (Sandbox Code Playgroud)

  • blah = 3; blah2 = 3; (4认同)
  • 这是一种笨手笨脚的东西,我觉得它总是出现在"早期/年轻"语言中.语言的神使得编写他们主观上令人反感的代码成为不可能(这是一个例子,另一个例子是必须用浮点数加上'0` [尝试在swift中写'let x = .5`]). (2认同)

Dan*_*ark 7

作为公认的回答说:你可以得到一些更严格的语法,但你不能从指派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)
Run Code Online (Sandbox Code Playgroud)

  • 感谢@Dan Rosenstark 对 inout 参数的引用 (2认同)