1.运行是否会报错?
var age: Int? = 10
var num = age + 20
会,因为age不是Int类型,age的类型是Optional可选类型,可选项相当于一个盒子,里面存的数据是Int类型,也可能是nil,nil是Int类型吗?显然不是.既然不是Int类型,age+20肯定会报错了
可选项绑定: Optional Binding 如果包含就自动动解包,把取出的值赋给一个临时常量或变量,并返回true,否则返回false
if let number = Int(“123”) {
// success
}else{
// fail
}
2.可选绑定,可以写多个条件绑定值,但是是以英文逗号为分隔,而不是if 中常用的&&符号
var age1: Int = 11
var age2: Int = 22
if let num1 = Int(“123”), let num2 = Int(“aa123”), age1 > age2 {
// success
}else{
// fail
}
3.while循环中使用可选项绑定
需求:遍历数组,将遇到的正数都加起来,如果遇到负数或者非数字,停止遍历
var strs = [“11”, “22”, “ab”]
var index = 0
var sum = 0
while let num = Int(strs[index]), num > 0 {
sum += sum
index += 1
}
print(sum)
4.隐试解包:使用的时候默认是解包了,但是它是可以为nil的,可以进行可选绑定取值不报错
var age: Int! = 10
var age2 = age;
age2就是隐试解包,它是可以进行判断是否为空,编译器不会警告
if age2 != nil {
…
}
实际开发中,很少使用隐试解包