Swift3.0学习--可选项

可选项

可选项的意义:因为在Swift里面不允许对’String’,’Array’等类型的变量赋值为nil,所以要将一个对象赋值为nil的时候,就用到了可选项

  • Optional,顾名思义,就是可选的意思,所以最初可选项的定义就是:
1
2
3
let x: Optional = 10 //表示x要么是整数值,要么是nil; Optional是个枚举{none(没有值),some(某一类值)}
print(x) ---> Optional(10) //打印的结果
  • 现在定义则是用 ‘?’ 来代替:
1
2
let y: Int? = 20
print(y) ---> Optional(20) //打印的结果
  • print (x + y)会报错
1
2
3
4
5
6
7
1.因为不同的类型之间不能直接运算,如果没有值是nil,nil不是任何数据类型,不能参与运算,也就是说可选项进行运算之前需要解包
2.常量的可选项使用前需要设置初始值:
let x: Int?
print(x) //会报错
3.变量的可选项默认是nil
var y: Int?
print(y) //nil
  • 运算需要对可选项解包
1
2
3
4
5
1."?"用来定义可选项
2."!"用来对可选项进行解包,从可选项中强行获取响应的非空值,如果真是nil,就崩溃,程序员要对每一次解包进行负责
print (x! + y!) --->30
3.最常见的错误:解包时发现了nil
unexpectedly found nil while unwrapping an Optional value
  • 强解包之前对可选项判断

if用法

if做完判断之后还是需要进行解包

1
2
3
4
5
6
let name: String? = "小明"
let age: Int? = 12
if name != nil && age != nil {
print(name! + String(age!)) //输出:小明12
}

if let用法

if let判断完后不需要解包,{}内一定有值

1
2
3
4
5
6
7
8
9
let name: String? = "小明"
let age: Int? = 12
if let name = name,
let age = age {
//进入这个分支,name和age一定有值
print(name + String(age)) //输出:小明12
}else{
print("name或者age有空值")
}

guard let用法

guard let少一层分支,Swift2.0退出

1
2
3
4
5
6
7
8
let name: String? = "小明"
let age: Int? = 12
gurad let name = name,
let age = age {
print("name或者age有空值")
return
}
print(name + String(age)) //输出:小明12

var let用法

可以修改{}内变量的值

1
2
3
4
5
6
7
8
9
10
let name: String? = "小明"
let age: Int? = 12
if var name = name,
let age = age {
//进入这个分支,name和age一定有值
name = "小花"
print(name + String(age)) //输出: 小花12
}else{
print("name或者age有空值")
}
这个人很帅<br>他什么都不想说<br>