Swift中元组的基础类型是什么?我在Swift模块中看到了一个关于Tuple的提及,但是我不能执行以下任何操作:
var x: Tuple
var y: Optional<Tuple>
Tuple是Swift中的编译器魔术还是实际类型?
宣告
let x: Tuple
由于两个原因而没有意义:
几乎等于宣告
let x: Array
也是禁止的(参数类型丢失)
这里的区别还在于Tuple
它本身不是类型。元组类型由它所包含的元素的类型及其编号来定义。
因此,Tuple
类型没有意义,而是您将拥有多个类型Tuple2
,Tuple3
依此类推。每个TupleX
都有X
类型参数,一旦提供,它们将定义具体类型。
编译器会迅速为您创建这种类型(我没有为此的引用,但这是我可以做出的唯一合理的假设),可能多达一个有限的数量(我仍然没有找到)。这些类型的命名看起来不是很明确,因此您不会找到Tuple2
,而是拥有一个($T1, $T2)
类型。
综上所述,Tuple
由于几个原因,声明参数毫无意义,但是您肯定可以得到类似
var x: (Int, String)
要么
var y: Optional<(Int, String)>
等等。
为了进一步阐明我的观点,这是为什么Tuple2
并且Tuple3
需要是两种不同的类型:
class Tuple2<T1,T2> {
init (_ e1: T1, _ e2: T2) {}
}
class Tuple3<T1,T2,T3> {
init (_ e1: T1, _ e2: T2, _ e3: T3) {}
}
Tuple2(1, "string")
Tuple3(1, "string", ["an", "array"])
这可能类似于编译器生成的内容,并且您可以很容易地看到它们各自TupleX
使用不同数量的类型参数,因此我们需要为每个X定义一个类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句