如果我有这样的元组
var answer: (number: Int, good: Bool)
我如何获得其中一个元素?
这不起作用:
answer["number"]
我在Swift: Get an array of element from an array of tuples之后对这个问题进行了建模,但我的问题更为基础。我确实找到了documentation中的答案,所以我在下面以Q& A格式添加我的答案,以便将来加快搜索速度。
答案 0 :(得分:58)
根据documentation(向下滚动到元组),有三种方法可以做到。
鉴于
var answer: (number: Int, good: Bool) = (100, true)
方法1
将元素变量名称放在元组中。
let (firstElement, _) = answer
let (_, secondElement) = answer
或
let (firstElement, secondElement) = answer
方法2
使用索引。
let firstElement = answer.0
let secondElement = answer.1
方法3
使用名称。当然,只有在元组声明中命名元素时,这才有效。
let firstElement = answer.number
let secondElement = answer.good
答案 1 :(得分: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"]