可选值

// 有值 , 没有值 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

不管哪一种,对没有值的可选值进行强制解析,会引起运行时错误

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容