Swift之元组
元组就是一个把多个值组成一个单一合成的复合值类型。一个元组内部的各个值可是任何类型,并且每个值的类型可以彼此不同。
比如这个例子,(404,"Not Found")是一个用来描述Http状态的元组。一个HTTP状态编码是当你请求一个web页面时,web服务返回的一个特定的值。404 Not Found 是当你请一个页面时,而这个页面不存在时返回的一种状态编码。
let http404Error = (404,"Not Found")
// http404Error 的类型为(Int,String)的元组,值为(404,"Not Found")
元组(404,"Not Found")集成了一个Int的字数和一个可读String的字符串两个值来说明HTTP状态编码。它可这样来说”一个类型为(Int,String)的元组"。
你可以通过任何类型组合来创建一个元组,元组可以包含你想要的不同的类型。元组(Int,Int,Int)或元组(String,Bool)都没有任何问题错误,或者把你所需要的任何类型组合在一起。
当你经常访问一个元组时你可以把一个元组分解到一个可分开的常量或变量中:
let (statusCode,statusMessage) = http404Error
println("The Status code is \(statusCode)") // 打印出 "The Status code is 404"
println("The status message \(statusMessage)") // 打印出"The status message Not Found"
如果你只是需要元组的一些值时,你可以在分解元组时通过下划线来忽略元组中你不需要的部分:
let (justTheStatusCode,_) = http404Error
println("The status code is \(justStatusCode)") // 只能访问justTheStatusCode
或者,通过一个索引来访问一个元组中一个单独的值,这个索引从0开始:
println("The status code is \(http404Error.0)") // 打印出 "The Status code is 404"
println("The status message \(http404Error.1)") // 打印出"The status message Not Found"
当元组被定义时为每个节点定义一个名字后,你也可通过名字来获取一个指定名字的值:
let http200Status = (statusCode: 200, description: "OK")
println("The status code is \(http200Status.statusCode)") //打印出 "The status code is 200"
println("The status message \(http200Status.description)") // 打印出"The status message is OK"
元组经常用于一个函数的返回值。一个函数需要返回一个web页面的状态可以一个元组(Int,String)的来描述页面返回值是成功或者失败。通过包含两个类型不同且值不同的元组作为函数的返回值比只使用一个单一类型的值作为使函数的返回值时能提供更多用有的信息。更我信息请参照"Siwft之返回值为元组的函数"小节
注意:元组经常用于需要临时联系在一起的值。他不适合创建一些复杂的数据结构。如果你的数据结构生命周期超过临时范围,已迟早的使用类或者结构这类的数据结构。