Swift中元组的底层类型

布恩

Swift中元组的基础类型是什么?我在Swift模块中看到了一个关于Tuple的提及,但是我不能执行以下任何操作:

var x: Tuple
var y: Optional<Tuple>

Tuple是Swift中的编译器魔术还是实际类型?

加布里埃·彼得罗内拉

宣告

let x: Tuple

由于两个原因而没有意义:

  • 元组基数丢失(见下文)
  • 参数类型丢失

几乎等于宣告

let x: Array

也是禁止的(参数类型丢失)

这里的区别还在于Tuple它本身不是类型。元组类型由它所包含的元素类型及其编号来定义

因此,Tuple类型没有意义,而是您将拥有多个类型Tuple2Tuple3依此类推。每个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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OCaml 中元组的类型注释

来自分类Dev

Swift中元组的多级排序数组

来自分类Dev

如何在dotty中解开元组中元素的类型?

来自分类Dev

猪中元组的转换

来自分类Dev

Python Pandas:如何检查列表中元组值的数据类型?

来自分类Dev

如何从 Spark Scala 中元组类型的迭代器中找到元素的总和?

来自分类Dev

如何在Swift中创建一个元组数组,其中元组中的一项是可选的?

来自分类Dev

Swift中元组基数的限制(如果有)是什么?

来自分类Dev

增加Erlang中元组的长度

来自分类Dev

Haskell中元组的递归定义

来自分类Dev

Python中元组的点积

来自分类Dev

增加Erlang中元组的长度

来自分类Dev

连接列表中元组的元素

来自分类Dev

元组是 Swift 中的值类型还是引用类型?

来自分类Dev

Kotlin - 提取底层类类型

来自分类Dev

值类型 ref 的底层实现

来自分类Dev

Swift编译器为什么无法找出混合类型数组中元素的类型?

来自分类Dev

Swift快速底层String lastIndexOf

来自分类Dev

在Swift中,我可以在元组中使用函数类型吗?

来自分类Dev

Haskell中元组的模式匹配相等

来自分类Dev

Scala中元组的深度比较数组

来自分类Dev

列表中元组的总计,总和与乘积

来自分类Dev

如何忽略元组中元素的顺序

来自分类Dev

如何比较列表中元组中的值

来自分类Dev

python中元组构造函数的目的

来自分类Dev

在pandas group by中元组的元素索引搜索

来自分类Dev

获取函数中元组解包的列表

来自分类Dev

python中元组列表的多级排序

来自分类Dev

Haskell中元组的模式匹配相等