Swift3.0 - 元组

元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。

举个栗子,当你请求网页不存在时会返回一个 404 Not Found状态码,你可以用元组来实现:

let http404Error = (404, "Not Found")
// http404Error 的类型是 (Int, String),值是 (404, "Not Found")

(404, "Not Found") 元组把一个 值和一个 值组合起来表示 HTTP 状态码的两个部分:一个数字 和一个人类可读的描述。这个元组可以被描述为“一个类型为 (Int, String) 的元组”。

你可以把任意顺序的类型组合成一个元组,这个元组可以包含所有类型。只要你想,你可以创建一个类型为 (Int,Int,Int) 或者 (String,Bool) 或者其他任何你想要的组合的元组。

  • 可以将元祖内容分解成单独的常量和变量
let (statusCode, statusMessage) = http404Error 
print("The status code is \(statusCode)")
// 输出 "The status code is 404"
print("The status message is \(statusMessage)") 
// 输出 "The status message is Not Found"

如果你只需要一部分元组值,分解的时候可以把要忽略的部分用下划线( _ )标记:

let (justTheStatusCode, _) = http404Error 
print("The status code is \(justTheStatusCode)") 
// 输出 "The status code is 404"
  • 可以通过下标来访问元组中的单个元素,下标从零开始
print("The status code is \(http404Error.0)")
// 输出 "The status code is 404"
print("The status message is \(http404Error.1)") 
// 输出 "The status message is Not Found"
  • 可以在定义时给单个元素命名,命名后通过名字来获取元素的值
let http200Status = (statusCode: 200, description: "OK")
print("The status code is \(http200Status.statusCode)")
// 输出 "The status code is 200"
print("The status message is \(http200Status.description)") 
// 输出 "The status message is OK"
  • 元组的比较

两个元组类型相同才能进行比较,即元素个数相同且相同下标的元素类型也相同。且不能比较超过6个以上元素的元组。

//根据第一个位置不相等的两个元素的大小来决定两个元组的大小
let tuple1 = (1,1)
let tuple2 = (1,2)
tuple1 < tuple2  //true

let tuple4 = (1,"a")
let tuple5 = (1,"b")
tuple4 < tuple5  //true
let tuple1 = (1,1)
let tuple2 = (1,2,3)
tuple1 < tuple2  //程序报错,元组类型不同无法比较

let largeTuple1 = (1,2,3,4,5,6,7)
let largeTuple2 = (1,2,3,4,5,6,7)
largeTuple1 == largeTuple2  //程序报错,元素个数超过6个无法比较

注意:
元组在临时组织值的时候很有用,但是并不适合创建复杂的数据结构。如果你的数据结
构并不是临时使用,请使用类或者结构体而不是元组。

你可能感兴趣的:(Swift3.0 - 元组)