可選項的本質
- 可選項的本質是enum類型
這是底層可選項的代碼,可以看出本質是enum
var age: Int? = 10
等價於以下四種:
var age0: Optional<Int> = Optional<Int>.some(10)
var age1: Optional = .some(10)
var age2 = Optional.some(10)
var age3 = Optional(10)
var age: Int? = nil
等價於以下四種:
var age = nil
var age3 = .none
var age0 = Optional<Int>.none
var age1: Optional<Int> = .none
switch舉例:
var age: Int? = .none
age = 10
age = .some(20)
age = nil
switch age {
//必須帶?纔會對age自動解包並賦值給v
case let v?:
print("some", v)
case nil:
print("none")
}
也可以寫成:
if let v = age {
print("some", v)
} else {
print("none")
}
還可以寫成:
switch age {
case let .some(v):
print("some", v)
case .none:
print("none")
}
多重可選項的本質
var age_: Int? = 10
var age: Int?? = age_
age = nil
上面的可以寫成如下兩種形式:
var age0 = Optional.some(Optional.some(10))
age0 = .none
var age1: Optional<Optional> = .some(.some(10))
age1 = .none
var age: Int?? = 10
可以寫成:
var age0: Optional<Optional> = 10