如何在 Swift 中直接根据元组元素的类型名称确定元组元素的类型?

问题描述 投票:0回答:1

我一直在 Swift 中探索不同的抽象,我发现自己被如何从元组元素本身的类型确定其类型所困扰。我知道编译器和 Xcode 很快就会向我(编码器)提供此类信息,并且我知道如何在元组变量或常量的元素上使用

type(of:)
,但我似乎无法弄清楚如何从代码中执行此操作仅使用元组类型。

这是我使用不完整代码的问题:

// Somewhere else in the code...
typealias NamedTuple = (/*someunknowntype*/, /*someotherunknowntype*/)

// Later in the code...
let tupleType = NamedTuple.self // repetitive, I know... but I know how to get its own type
let tupleElement0Type = // <-- How do I get this from the NamedTuple alias?

我似乎找不到任何文档提到从元组的类型名称或文字格式访问元组元素的方法,尽管后者很愚蠢。

我已经知道如何使用通用解决方案来解决这些问题。我只是在寻找直接的东西,比如在类型名称或别名上使用

.self

我已经可以获取数组(

ArrayType.Element.type
)和字典(
Dictionary.Key.self
Dictionary.Value.self
)的元素类型,但这些显然是通过它们的
typealias
属性获得的。

有谁知道如何直接从类型的名称或别名输入类型的元素? 或者,至少来自数组或字典以外的集合类型?

swift types tuples self abstraction
1个回答
0
投票

对于没有标签的元组,可以通过参数包来实现:

func tupleTypes<each T>(_: (repeat (each T)).Type) -> (repeat (each T).Type) {
    ((repeat (each T).self))
}

typealias MyTuple = (Int, String, [Double])
print(tupleTypes(MyTuple.self))
// (Swift.Int, Swift.String, Swift.Array<Swift.Double>)

let types = tupleTypes(MyTuple.self)
print(types.0)
// Int
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.