Swift: 如何从元组中获取一个元素

35

如果我有一个像这样的元组

var answer: (number: Int, good: Bool)

我该如何获取其中一个元素?

这种方法不起作用:

answer["number"]

我参考了这个问题:Swift: Get an array of element from an array of tuples,不过我的问题更基础一些。我在文档中找到了答案,因此在下面以问答形式添加了我的答案,以便于未来更快地搜索。

2个回答

85
根据文档(滚动到元组部分),有三种方法来实现它。
给定:
var answer: (number: Int, good: Bool) = (100, true)

方法1

将元素变量名放入一个元组中。

let (firstElement, _) = answer
let (_, secondElement) = answer
或者
let (firstElement, secondElement) = answer

方法二

使用索引。

let firstElement = answer.0
let secondElement = answer.1

方法三

使用元素名称。当然,前提是在Tuple声明中已经命名了元素。

let firstElement = answer.number
let secondElement = answer.good

5
在学习了如何在Swift中声明变量后,我不得不说,第一种方法真的让我感到很不舒服。 - MetaGuru

1
我试过这个。不是很好但能用...
protocol SubscriptTuple {
    associatedtype Tuple
    associatedtype Return
    var value: Tuple { get set }
    subscript(sub: String) -> Return? { get }
}

struct TupleContainer: SubscriptTuple {
    typealias Tuple = (number: Int, good: Bool)
    typealias Return = Any
    var value: Tuple
    subscript(sub: String) -> Return? {
        switch sub {
        case "number":
            return value.number
        case "good":
            return value.good
        default:
            return nil
        }
    }
}

这是如何使用的。
let answer = Answer(value: (120, false))
answer["number"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接