使用变量访问元组的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用变量访问元组的值相关的知识,希望对你有一定的参考价值。
如何根据动态值从元组中读取项?例如,如果我想在这里“香蕉”,我这样做:
var tuple = ("banana", "sock", "shoe")
print(tuple.0)
但是如何使用存储在另一个变量中的值?
var parameter = 0
print(tuple.parameter)
答案
元组不够灵活,无法做到这一点。你可以接近功能:
let tuple = ("banana", "sock", "shoe")
let first = { (t: (String, String, String)) -> String in t.0 }
let second = { (t: (String, String, String)) -> String in t.1 }
let third = { (t: (String, String, String)) -> String in t.2 }
let choice = first
print(first(tuple))
但这根本不可扩展;对于要与之交互的每个元组类型,您需要一组这样的函数。
一种选择可能是创建一个struct
作为你的元组的替代品。然后你可以使用KeyPath
。例如:
struct Items
{
let first: String
let second: String
let third: String
init(tuple: (String, String, String))
{
self.first = tuple.0
self.second = tuple.1
self.third = tuple.2
}
}
let choice = Items.first
let items = Items(tuple: tuple)
print(items[keyPath: choice])
或者,如果你的元组像你的例子一样是同质的,另一种选择是转换为数组并使用数组下标:
extension Array where Element == String
{
init(_ tuple: (String, String, String))
{
self.init([tuple.0, tuple.1, tuple.2])
}
}
let array = Array(tuple)
let index = 0
print(array[index])
(类似下标的密钥路径也将在未来的Swift中出现,但在这种情况下,它们不会在常规下标之上购买任何东西。)
以上是关于使用变量访问元组的值的主要内容,如果未能解决你的问题,请参考以下文章