元组 Tuples
- 定义1:let info = (“joker”,100,true)
info.0; info.1; info.2
- 定义2:let (name,age,good) = (“joker”,100,true)
name, age, good
- 定义3:let info = (name:”joker”,age:100,good:true)
info.name , info.age , info.good<br>
也可以定义用 _ 表示不关心该数据, 不能访问,元组的数据类型不能改变
结合关键字typealias比较好用
1
2typealias namedFishesType = (first:Int, second:String, third:Bool)
let namedFishes: namedFishesType = (1, "tow", false)
元组判断 (使用下划线( _)来表明匹配所有可能的值)
1
2
3
4
5
6
7
8
9
10
11
12
13let somePoint = (1, -1)
switch somePoint {
case (0, 0):
print("(0, 0) is at the origin")
case (_, 0):
print("(\(somePoint.0), 0) is on the x-axis")
case (0, _):
print("(0, \(somePoint.1)) is on the y-axis")
case (-2...2, -2...2):
print("(\(somePoint.0), \(somePoint.1)) is inside the box")
default: print("(\(somePoint.0), \(somePoint.1)) is outside of the box")}
// prints "(1, 1) is inside the box"
控制流
- do-while换成了
repeat-while
其它不变 - 各种
condition
: condition语句可以不用括号包裹,如 :if i>10{ statements}condition只支持true or false 不再像oc支持判空或者判0 必须加以判定,如:if ob != nil {} if index != 0 {}
switch
语句,不再需要显式break语句,不再贯穿,如果需要贯穿则需要加关键字 fallthrough可用区间匹配 ... ..< 复合情况 ,可用,分隔 case 1,3,5,6:
- 可选项绑定 (与一般if控制流有区别,if 后condition 必定是Bool)
1
2
3
4
5
6
7
8
9
10
11
12
13
14let str = "12"
if let id = Int(str) {
print("解析成功")
}else{
print("解析失败")
}
//普通if用法
let str = "12"
let id = Int(str)
if id != nil {
print("解析成功")
}else{
print("解析失败")
}
?和!的使用和区别
问号?
- 声明时添加?,告诉编译器这个是
Optional
的,如果声明时没有手动初始化,就自动初始化为nil - 在对变量值操作前添加?,判断如果变量时nil,则不响应后面的方法。
叹号!
- 声明时添加!,告诉编译器这个是
Optional
的,并且之后对该变量操作的时候,都隐式的在操作前添加! - 在对变量操作前添加!,表示默认为非nil,直接解包进行处理
不确定类型
- AnyObject 可以表示任何类类型的实例。
- Any 可以表示任何类型,包括函数类型。
协议
- 协议可以放属性,子类可以继承修改 如:
var nickName:String { get set}
- 协议可以放初始化方法