Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 括号内的Swift类型_Types_Swift_Parentheses - Fatal编程技术网

Types 括号内的Swift类型

Types 括号内的Swift类型,types,swift,parentheses,Types,Swift,Parentheses,今天我和斯威夫特在一起玩,突然出现了一些奇怪的类型: let flip = Int(random()%2) //or arc4random(), or rand(); whatever you prefer 如果我在Xcode 6(Beta 2)中键入flip,自动完成会弹出,并说flip是(Int)类型,而不是Int 这很容易改变: let flip : Int = Int(random()%2) let flop = random()%2 现在触发器和触发器的类型是Int,而不是(In

今天我和斯威夫特在一起玩,突然出现了一些奇怪的类型:

let flip = Int(random()%2)  //or arc4random(), or rand(); whatever you prefer
如果我在Xcode 6(Beta 2)中键入
flip
,自动完成会弹出,并说
flip
(Int)
类型,而不是
Int

这很容易改变:

let flip : Int = Int(random()%2)
let flop = random()%2
现在触发器和触发器的类型是
Int
,而不是
(Int)

更多地使用它,这些“括号类型”是可预测的,您可以通过在变量赋值的任何部分添加额外的括号来实现

let g = (5)      //becomes type (Int)
您甚至可以在类型中添加括号

let h = ((5))    //becomes type ((Int))
let k = (((5)))  //becomes type (((Int)))
//etc.

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

部分原因是括号是有意义的

let g = (5)
…表示
g
由一个Int组成,符号为
(Int)
。它是
(5,6)
的单元素版本,符号为
(Int,Int)

通常,您需要非常小心Swift中的括号;它们不能在任何老地方使用。它们有意义


然而,部分原因也是代码完成机制有缺陷。如果你有一个可复制的案例,请向苹果公司提交一份报告。

据我所知,没有区别
(Int)
Int
是同一类型;它可以用任何一种方式编写。

我测试了您的初始代码,它首先按照您的预期工作。我是否使用Int()并不重要。所以,我无法重现你的观察结果。是的。把它扔回操场,一切都很顺利。但是,我仍然不确定这些括号类型的用途(因为它们仍然出现)。然后我将编辑掉那个介绍,直接问我的问题。我想这只是IDE bug
(Int)
Int
“如果括号内只有一个元素,那么类型就是该元素的类型。例如,(Int)的类型是Int,而不是(Int)。”这就是问题所在。我也以另一种方式看到了它:我有一个接受两个整数的元组的函数,但代码完成将其视为接受两个整数。我还看到了一些与类型声明相关的其他bug;例如,
让x=Thing?[]()
不起作用。函数需要两个整数:
(Int,Int)->Void
。函数接受两个整数的元组:
((Int,Int))->Void
。但我同意元组和数组或可选的相比是非常混乱的,在数组或可选的情况下,语法比库类型更重要。我在库中找不到类似于
Tuple
的东西。“部分原因是括号是有意义的。”您还没有演示过它有意义的任何情况(即代码语义的不同之处取决于括号是否存在)@BryanChen:“函数取两个整数:(Int,Int)->Void。函数取两个整数的Tuple:((Int,Int))->Void。“这两个函数是相同的。第一个函数也可以接受两个Int的元组;第二个函数也可以接受两个Int。