关于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
先上代码:
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("解包失败")
}
举报