什么时候应该使用元组而不是对象,反之亦然?

时间:2014-06-06 12:36:27

标签: object tuples semantics swift

我今天了解了元组,简而言之它们允许你存储多个值,一个tupel的例子是

let exampleTuple = (exampleString: "This",  exampleInt: 1)

我们可以使用点表示法轻松访问元组的任何值,例如:

exampleTuple.exampleString

对我而言,这似乎与持有某些信息的对象非常相似,我可能会遗漏某些东西或者完全不理解元组,因此我要求解释何时应该使用元组或对象?

2 个答案:

答案 0 :(得分:2)

根据book on Swift

  

元组对临时的相关值组很有用。它们不适合创建复杂的数据结构。

他们通过数据范围定义“临时”:如果一段数据永远不会离开单个方法的范围,或者同一个对象的一组方法,它可以被认为是临时的,即使它可能非常在应用程序的生命周期中保持良好状态。

如果您的数据结构在临时范围之外有用 - 例如,因为它需要从类的公共方法返回,请将其建模为类或结构,而不是作为元组。

另一个重要的考虑因素是将行为与您的数据相关联:如果您的对象需要具有方法,请为它们使用类。仅将元组用于没有行为的数据。

答案 1 :(得分:1)

元组在Python中被大量使用,在我看来,它们在Swift中的作用大致相同。将其视为从一个点到另一个点提供多个值的快速方法。 Swift书中显示的一个示例和Python中常用的模式是从方法返回HTTP状态代码和文本正文:

func greeting() {
    return (200, "Hello World")
}

...

let (status, body) = greeting()
if 200 == status {
    println(body)
}
else if status >= 400 {
    println("Error \(status): \(body)")
}

当然这仅仅是一个用例,但我认为它得到了重点。内置示例是函数enumerate(),它返回(index, value)的元组:

for (idx, val) in enumerate(["a", "b", "c"]) {
    println("Index \(idx): \(val)")
}