swift元组

元组的定义:

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  }}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。