括号内的Swift类型

cpi*_*off 3 types parentheses swift

今天我和Swift一起玩,一些奇怪的类型开始出现:

let flip = Int(random()%2)  //or arc4random(), or rand(); whatever you prefer
Run Code Online (Sandbox Code Playgroud)

如果我输入flipXcode 6(Beta 2),弹出自动完成,并说flip是类型(Int)而不是Int.

这很容易改变:

let flip : Int = Int(random()%2)
let flop = random()%2
Run Code Online (Sandbox Code Playgroud)

现在翻转和翻牌都是类型Int而不是(Int)

更多地使用它,这些"括号类型"是可预测的,你可以通过在变量赋值的任何部分添加额外的括号来引起它们.

let g = (5)      //becomes type (Int)
Run Code Online (Sandbox Code Playgroud)

你甚至可以在类型中引起额外的括号!

let h = ((5))    //becomes type ((Int))
let k = (((5)))  //becomes type (((Int)))
//etc.
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:这些括号类型(Int)和类型之间有什么区别Int

mat*_*att 5

部分是括号是有意义的.

let g = (5)
Run Code Online (Sandbox Code Playgroud)

...意味着它g是一个由一个Int组成的元组,符号化(Int).它是(5,6)符号化的单元素版本(Int,Int).

一般来说,你需要对Swift中的括号非常小心; 它们不能只用于任何旧地方.他们有意义.

但是,部分原因还在于代码完成机制存在问题.如果您具有可重现的案例,请向Apple提交报告.

  • "如果括号内只有一个元素,则类型只是该元素的类型.例如,(Int)的类型是Int,而不是(Int)." (2认同)