// 有值 , 没有值 nil
var optionValue :Int?
if (optionValue != nil) {
print("有值+(optionValue)")
}
if optionValue == nil {
print("没有值+(optionValue)") // 没有值+nil
}
optionValue = 10
if (optionValue != nil) {
print("有值+(optionValue)") // 有值+Optional(10)
}
if optionValue == nil {
print("没有值+(optionValue)")
}
// ! 表示对可选值的强制解析 optionValue!
// optionValue 必须有值, 不可以对没有值进行强制解包 如果没有值会引起运行时错误
// 可选类型是一种类型 不进行强制解包可以理解为类型不一致
var value:Int = optionValue!
print(value) // 10
// 可选绑定
if var svalue = optionValue { // var svalue = optionValue 是个语法糖 没有值什么也不做,有值的话给 optionValue赋值给 svalue
print(svalue)
print(optionValue)
}
// 隐式解析可选类型 有值 没有值nil
var optionToValue: Int! = 99 //隐式可选类型
//解包1
if (optionToValue != nil) {
print(optionToValue) //99
}
// 解包 2
if let ivalue = optionToValue {
print(optionToValue) //99
}
// 解包3 有没有 ! 无所谓
// optionToValue 没有值 会引起运行时的错误 下边会报错
// 对一个没有值的可选值进行强制解包 会引起运行时的错误
// 确定有值的 可以进行强制解析
var ivalue :Int = optionToValue
print(ivalue) //99
var value :Int = optionToValue!
print(value) // 99