Pre:
首先swift这种语言不会默认给用var声明的变量赋初值,所以就牵涉到你用这个变量的时候到底有没有值的问题,它的解决方法就是?和!
首先理解下?和!都是一种语法糖;
?和!都是一种简化的写法,像下边这样:
var strValue: String? //?相当于下面这种写法的语法糖
var strValue: Optional<</span>String>
Optional是一个类,意思是我可以通过Optional类对String类型的值进行装包和拆包,但是这个值是nil还是有some value,就不确定了;
?是一种判断后再拆包的语法糖
!是一种强制拆包的语法糖
So:
当你不确定有值的时候就可以用 “?”
当你确定有值的时候可以用 “!”
一个例子:
let hashValue = strValue?.hashValue //如果不确定用?,会先做判断,如果拆包有值,才会用拿到的值做后续操作
strValue = “1”
print(strValue!.hashValue) //确定一定会有值可以用!