在swift中,可选类型的根源其实是一个枚举类型,里面有some和none两种类型。其实就是所谓的nil就是optional.some,非nil就是optional.some。然后会通过some(T)
包装(wrap)原始值,对其进行拆包的过程。这里对enum optional的定义:
enum Optional<T> : LogicValue, Reflectable {
case None
case Some(T)
init()
init(_ some: T)
/// Allow use in a Boolean context.
func getLogicValue() -> Bool
/// Haskell's fmap, which was mis-named
func map<U>(f: (T) -> U) -> U?
func getMirror() -> Mirror
}
语法使用“?”操作符及“!”
var optionParama : String? = "abc"
optionParama = "ABC"
//非空取默认值“abc”
print(optionParama ?? "abc")
optionParama = nil
print(optionParama ?? "abc")
//定义的可以为空,编译时会报警告,但是运行不会出错
print(optionParama)
var someParama : String! = "SDF"
someParama = "sdf"
print(someParama)
//如果定义为非空的类型,如果在赋值为空,就会崩溃,但是编译不会报错
// someParama = nil
// print(someParama)
输出:
ABC
abc
nil
pdf
abc
nil
总结:在使用可选类型和隐式可选类型的时候,一定要明确使用的场景,看定义的属性是否会出现值为空的情况。