Swift 中的 ? 与 !
在Swift中多出了这两个玩意
?
和!
,到底是什么鬼?!
用法
在声明变量的时候会用到:
var sunny: String?
var young: String!
在调用变量进行使用操作会用到:
sunny?.isEmpty
young!.isEmpty //其实这里可以这样写young.isEmpty
普通情况下,在声明一个变量的时候如果不手动初始化,则不会自动给该变量一个初始的默认值:
var sunny: String //没有任何值
println(sunny) //报错
对于在类型后面加了?
的变量为Optional
变量,如果不给定初始值,则系统会自动给它一个默认初始值为nil
。
对于在类型后面加了!
的变量如果不给定初始值,则同样也会自动给它一个默认初始值为nil
。
var sunny: String? //值为nil
var young: Int? //值同样为nil
var hahaha: Number! //值同样为nil
println(sunny) //不报错
区别
然而在调用self.sunny?
的时候,如果sunny
为nil则直接返回nil,在调用self.hahaha
的时候,!
的意思是该变量一定有值并返回,如果该变量为nil的话,是会报错的。同时在取Optional
变量的确切值的时候,需要加上!
,例如println(self.sunny!)
。