元组的定义:
vart1 : (String) = ("我是字符串")
vart2 : (String, Int) = ("李刚",34)
vart2 : (name:String,age:Int) = (name:"李刚",age:34)
vart_t : (String, (String, Int)) = ("基本信息", ("李刚",34))
元组的访问:
例如var t2 = ("李刚",34) name = t2.0 age = t2.1
当元素命名时,可以用命名访问数据,当然仍可以使用序号进行访问
例如var t2 = (name:"李刚",34) 仍然可以用序号访问 name = t2.0;也可以用命名访问 name = t2.name
元组的数据修改
虽然元组的数据不能增删,但是修改还是可以的
vart2 = (name:"李刚",34)t2.name ="王帅"t2 = ("李教授",45)
但是数据类型不能改变
t2.name =11//报错!!!
如果是常量定义,元组的数据不能改变
lett3 = (name:"李一",24)t3.name ="李二狗"//报错!!!
当然,如果指定数据类型为Any,这种情况下数据可以改变类型
vart_any : (String, Any) = ("李一",24)t_any.1="可以改为String"//Any不限定数据类型
元组与Array、Dictionary的组合定义
数组嵌套元组
var moneyArray:[(Int,String)] = [(10,"Penny"), (15,"Nickle"), (3,"Quarter")]
字典嵌套元组
var userInfoDic:[String, (Int,String)] = ["peny":(10,"girl"),"nakl":(15,"boy")]
元组的常见使用场景
适合函数返回多元数据
func userInfo()->(String, Int){return("李刚", Int)}
函数也可以返回可选元组,即可以返回nil
func userInfo()->(String, Int)?{return nil}
当然也可以部分元素为可选
func userInfo()->(String?, Int){return(nil,34)}
甚至可以用来给函数传递多元参数
//定义一个函数,有number和text两个参数
func doSomething(number: Int,text:String) { println("\(number): \(text)")}
//正常调用方式:doSomething(1,"one")
//元组调用方式let tupleVar = (1,"one"); doSomething(tupleVar)
高级实例
假设有一个数组
//模拟情绪数据
var emotions : [(type :String,strength: Int)] = [("happy",0),("scared",0),("tender",0)]
我想遍历数组,然后对happy进行+1,应怎么做?
for(ix,emo) in enumerate(emotions) {if emo.type =="happy"{ emotions[ix] = (type:emo.type,strength:emo.strength+1) }}
有没有更高级的做法?有!
//这里用到了map,具体方法可以google一下,本文不涉及emotions = emotions.map { emoinifemo.type =="happy"{return(type:emo.type,strength:emo.strength+1) }else{returnemo }}