Swift: Get an element from a tuple

强颜欢笑 提交于 2020-01-12 04:23:19

问题


If I have a tuple like this

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

How do I get one of the elements?

This doesn't work:

answer["number"]

I am modeling this question after Swift: Get an array of element from an array of tuples, but my question was a little more basic. I did find the answer buried in the documentation so I am adding my answer below in Q&A format for faster searching in the future.


回答1:


According to the documentation (scroll down to Tuples), there are three ways to do it.

Given

var answer: (number: Int, good: Bool) = (100, true)

Method 1

Put the element variable name within a tuple.

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

or

let (firstElement, secondElement) = answer

Method 2

Use the index.

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

Method 3

Use the names. This only works, of course, if the elements were named in the Tuple declaration.

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



回答2:


I tried this. It's not so good but works...

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
        }
    }
}

And this is how to use.

let answer = Answer(value: (120, false))
answer["number"]


来源:https://stackoverflow.com/questions/37200162/swift-get-an-element-from-a-tuple

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!