swift中?和!大家可能都知道是可空类型 optional ,也叫可选类型
这样做是为了类型安全,比如声明一个对象A为可选类型,或者一个可选的String
var a:A?
var str:String?
var num:NSNumber!
可选类型 可以不用初始化,如果不是可选类型,必须在init下进行初始化。保证在调用的时候不是nil
可选类型在调用的时候必须加上?或者!,声明的时候用的!的可以不加,表明你认定这个对象再使用的时候肯定不会为nil,也可以加?不会报错
a?.age
//这样调用如果a是nil就不执行a.age如果a不是nil才会去调用它的属性,得到的也是一个可选的值
a!.age
//表示你认定a可定不是nil,如果a是nil就会报错,得到是固定的值
if let a = a{
a.age
//可选绑定 如果a不为nil会进来执行a.age得到的是非可选的值
}
//如果有多个可选绑定
if let a = a,str=str{
//blabla
}
?和!网上讲的都很多,其实关于可选这里还有个??
??是取两个中不为nil的
private var i:Int?
private var j:Int?
1、只有i有值
i = 1
let x = i ?? j
print(x) //输出optional(1)
2、只有j有值
j = 0
let x = i ?? j
print(x) //输出optional(0)
3、i和j都有值
i = 1
j = 2
let x = i ?? j
print(x) //输出optional(1)
4、i和j都没值
let x = i ?? j
print(x) //输出nil