關于wrap的問題
let name = Optional.some("daniel")
這時候的name是String? 也就是說這個name是屬于Optional的枚舉類型的
如果一解包個String?的值 解包出來是nil 就是說這個值是屬于Optional里面的.none類型 而他不是屬于Optional里面的.some類型?
let name = Optional.some("daniel")
這時候的name是String? 也就是說這個name是屬于Optional的枚舉類型的
如果一解包個String?的值 解包出來是nil 就是說這個值是屬于Optional里面的.none類型 而他不是屬于Optional里面的.some類型?
2019-01-13
舉報
2019-01-22
先上代碼:
var name = Optional.some("daniel")
??? ? name? = Optional.none
首先:對題主提問中對表表述做一點點更正。也許更正了這個也就同時解決了題主對提問
“就是說這個值是屬于Optional里面的‘.none類型 ’而他不是屬于Optional里面的‘.some類型 ’?”
其中.‘.none類型 ’不應該稱之為一種“類型”,‘.some類型 ’也不應該稱之為一種“類型”。它們兩個都是“Optional類型”這種類型的一個枚舉值。順便說一下,至于“Optional類型”從源碼看(
public enum Optional<Wrapped> : ExpressibleByNilLiteral
),它是一個枚舉類型。
另外:
如果一解包個String?的值 ,得到的結果是String類型。對nil 進行解包,是不會得到nil的。代碼如下。題主可以借助 Xcode 自行看一下相應對變量類型
var?str : String? =?nil ?// 等價于 ?var?str2 : String? = Optional.none
if?let?newStr = str {
? ? print(newStr)
}?else{
//? ? print(newStr) //編譯出錯
? ? print("解包失敗")
}