为什么需要 Optional
什么是 Optional
变量类型后面添加?表示
这里有一个值= x 或者 这里根本没有数值
Optional-if 语句 以及强制展开
可选项是没法直接使用的
需要用!展开之后才能使用。意思是确定步不为 nil
强制展开
绑定
隐士展开
可选链
可选项后面加?
如果可选项不为 nil 返回一个可选项结结果,否则返回 nil
源码探究
var str2:Optional<String>="abc"
if(str2 != nil){
let count = str2.unsafelyUnwrapped.count
print(count)
}
可以点进去看 Optional的源码 你会发现这并不是 swift 的新特性 而是使用了枚举
//声明为可空 nil 其实是声明为Any类型
var password2: String?
dump(password2)
//下面 第一个?声明一个Optional变量 第二个?在堆Optional值操作时,判断是否可以相应后面的操作
var password:String?
print(password?.count)
//
//双??号 前面的值为空的时候 使用后面的值
var password3: String?
print(password3?.count ?? 0)
//下面的!就是拆包的意思 把Optional拆分成原始值
var password4:String?
password="1234556"
print(password4!.count)
//会被可选包裹
print(password4?.count)
// 双问好代表前面为空的时候使用后面数值来充当默认值
print(password4?.count ?? 0)
//传统的空值判断,通常要使用if语句 代码量比较大,而使用问好和感叹号,则可以很简洁的进行空值判断。下面就是一个空值判断的实例
class Pet{
var name: String?
}
class Person{
var name : String?
var pet : Pet?
}
let person=Person()
person.pet
//如果person.pet 为空就直接返回空。不再尝试获取.name属性
person.pet?.name
person.pet=Pet()
person.pet
person.pet?.name
person.pet?.name="Brid"
person.pet?.name