这次接着上一遍的元组继续写
- 以前没有元组之前Object-C是通过传入指针或者是结构体的方式来返回多个值的,然而有了元组之后就可以实现让一个函数返回多个值
// 补充:
/**
* 元组的定义
* 一元元组,会将编译器优化为其实际元素的类型
*/
var t1 :(String) = ("我是字符串")// 等同于下边一行代码
//var t1 : String = "我是字符串"
// 可以缺省类型 var t1 = "我是字符串"
// 注意!!!:由于t1实际为String类型,因此t1.0的访问会报错
// 元组支持嵌套
var t_t : (String,(String ,Int)) = ("基本信息",("芳草天",25))
// 可以将元组的类型重定义为一个类型名
typealias namedFinahsesType = (first:String,second:String,third:String)
let namedFinshes:namedFinahsesType = ("芳草天","洲洲","25")
/*元组的数据访问*/
// 当元素未命名时,采用自然顺序访问,序号从0开始
var t2 = ("芳草天",25)
var names = t2.0
var ages = t2.1
print("name:\(names),age:\(ages)")
//当元素命名时,可以用命名访问数据,当然仍然可以使用序号访问
var t3 = (name:"洲洲",age:25)
names = t3.0//或者names = t3.name
ages = t3.age
print("name:\(names).age:\(ages)")
// 可以用多个变量同时进行访问
var t4 = (name:"芳草天洲洲",22)
var (name3,age3) = t4// 即可同时获取name,age
var (name, _) = t4// 不需要时参数可以缺省
// 注意:元组为数值类型。因此元组的copy是值copy
var t5 = (name:"路飞",18)
var t5_copy = t5
t5.name = "乔巴"
print("\(t5_copy.name)")// 打印结果:路飞
// 关于元组的访问级别
/**
* 元组的访问级别取决于它包含的元素,比如元组里的元素都是private级别的,那么该元组也是private级别
* 遵循最小原则,也就是说如果一个元组中有两个元素,一个private级别,另一个为public级别,那么该元组遵循最小原则,它的访问级别为private级别
*/
// 元组数据修改
// 虽然元组的数据不能增删,但是可以修改的
var t6 = (name:"芳草天洲洲",26)
t6.name = "李白"
print("\(t6.name)")// 打印李白
t6.name = "碧莲洲洲"
print("\(t6.name)")
// 但是数据类型不能改变
//t6.name = 30//报错
//如果是常量定义,元组的数据不能改变
let t7 = (name:"娜美",22)
// t7.name = "迦娜"// 报错
// 当然如果你指定数据类型为Any,这种情况下数据类型可以被改变
var t_any :(String,Any) = ("娑娜",18)
t_any.1 = "娑娜很大但是年龄小哦"// Any不限定数据类型
/** 元组与Array, Dictionary的组合定义**/
// 数组嵌套元素
var moneyArray:[(Int,String)] = [(20,"Cidy"), (18,"Nickle"), (14, "Quarter")]
// 字典嵌套元组
var userInfoDic:[String:(Int,String)] = ["cidy":(20,"girl"), "nickl":(15,"boy")]
print(userInfoDic) // 打印:["cidy": (20, "girl"), "nickl": (15, "boy")]