数组 Array
- 数组是有序的
- 用来存储多个值
- 数组容量可大可小
- 用下标方法,从0开始
- 不能访问一个不存在的下标
let students = ["张三", "李四", "王五"]
print(students[0])
var cities: [String] = ["London", "Paris", "New York"]
var readings: [Bool] = [false, false, true, false]
var scores: [Int] = [10, 12, 9]
S
print(scores[11])
// Index out of range
集合Set
- 没有顺序
- 不能重复
- 要传入一个数组
let colors = Set(["red","green","blue"])
print(colors)
// 输出 ["blue", "green", "red"] ,说明没有位置的顺序
let colors2 = Set(["red","green","blue","blue"])
print(colors2)
// ["red", "green", "blue"] ,去了重复项
元组Tuple
- 大小固定,创建时就确定大小,不能添加或删除
- 不能修改类型
- 可以通过下标或命名来访问,但不能访问不存在的元素
- 从0开始
- 从
.下标
语法访问 - 元素不能含有多行字符串
let student1 = ("liding",40)
// 下标访问
print(student1.0)
// 命名访问
let student2 = (name:"zhangsan",age:32)
print(student2.name)
// 网站的名称和网址放在元组中是非常合理的,也不能修改,因为apple的网址就是这个
var website1 = (name:"apple",url:"www.apple.com")
print(website1.name)
// 放在数组中就不太好看,也没有什么意义
var website2 = ["apple","www.apple.com"]
print(website2[0])
数组vs 集合 vs 元组
- 固定的,每个项目不改变的就用元组
- 如果要求值是唯一的,就用集合
- 如果有顺序要求,就会数组
let address = (city:"郑州", street:"航海路", house:"34-1")
let members = Set(["黄金", "普通", "白银"])
let language = ["python","javascript","css","nodejs","swift"]
Array | Tuple | Set | |
---|---|---|---|
建立 | [] | () | Set([]) |
顺序 | 有 | - | - |
重复 | 可以 | 可以 | 不行 |
访问 | a[0] | t.0 t.name |
字典 Dict
- 使用[]建立
- [key:valu,key:value...]
- 字典和数组是来存大量数组的容器,字典用key来访问,数组用index来访问
- key可以是数字,就用d[key]来访问
- 字典不能用下标访问
字典的默认值
let fav = [
"张三": "烩面",
"李四": "面条"
]
print(fav["张三"])
// 烩面
print(fav["赵六"])
// nil 不存在为空
let fav1 = [
"张三": "烩面",
"李四": "面条"
]
print(fav1["赵六",default:"不知道"])
// 不知道 不存在,返回不知道
空的集合(collections)
- Array Set Tuple Dictonary 都是存储多个值的元素,可以叫做collections
// 空的字典,以后可以再放内容
var teams = [String:String] ()
teams["zz"] = "red"
// 空的数组
var scores = [Int]()
//统一写法 数组 字典 集合
var a = Array<Int>()
var d = Dictionary<String,Int>()
var s = Set<String>()
枚举enum
一般来描述可以有限列举的对象,如玩家状态,星期,月份,错误码,性别代码,选择项目
// 定义类型 一般大写字母开头
enum Week {
case 星期一
case 星期二
case 星期三
case 星期四
case 星期五
case 星期六
case 星期天
}
// 声明这个变量,变赋值是其中的一个
var day:Week = Week.星期一
print(day) //星期一
enum Playerstate {
case idle
case walk(speed:Int)
case run(speed:Int)
case fly(speed:Int)
case die
}
var lp: Playerstate = Playerstate.walk(speed:30)
print(lp) //walk(speed: 30)
// 直接推断出类型
var lpidel = Playerstate.idle
print(lpidel)
枚举的原始值
- rawValue
// 声明枚举进,要声明其类型为Int
enum Playerstate:Int {
case idle = 10
case walk
case run
case fly
case die
}
var p = Playerstate.idle
print(p) //idle
//idle是10,walk就是11
var p1 = Playerstate(rawValue: 11)
print(p1) //Optional(firstswift.Playerstate.walk)
总结
- Array Set Tuple Dictonary 都是将多个值存在一个变量的方法,使用哪个取决于你的行为
- Array是有顺序的,按按照数字位(index)访问
- Tuple大小是固定的,可以用数字位或名称来访问
- Dictonary是根据键名来访问
- Enum是对相关值进行分组的一种方法,所以在使用过程不致于出现拼写错误
- 枚举有原始值,也可以存储关联的信息