/*
Optional
我们使用类型后面加上?的语法只不过是Optional类型的语法糖,而实际这个类型是一个enum:
*/
publicenumOptional :ExpressibleByNilLiteral{
/// The absence of a value.
///
/// In code, the absence of a value is typically written using the `nil`
/// literal rather than the explicit `.none` enumeration case.
casenone
/// The presence of a value, stored as `Wrapped`.
casesome(Wrapped)
// ...
}
/*
在Optional中没有对Wrapped进行任何限制,可以是任何类型(String, Int,另一个Optional)
*/
varstring:String? ="string"//类型String?
varanotherString:String?? =string//类型String??
varaNil:String? =nil
varanotherNil:String?? =aNil//一个大盒子中装有一个小盒子,小盒子里面为空
varliteralNil:String?? =nil//盒子里面为空
ifleta =anotherNil{
print("anotherNil")//这里输出
}
ifletb =literalNil{
print("literalNil")//这里不会输出
}
ifanotherNil==nil{
print("--- anotherNil")//这里不会输出
}
ifliteralNil==nil{
print("--- literalNil")//这里会输出
}
/*
但是通过lldb打印po的时候,都会显示为nil
可以说使用fr v -R命令打印出未加工时的信息
*/