问答详情
源自:1-6 swift枚举之可选型的实质是枚举!

关于wrap的问题


let name = Optional.some("daniel")

这时候的name是String? 也就是说这个name是属于Optional的枚举类型的

如果一解包个String?的值 解包出来是nil 就是说这个值是属于Optional里面的.none类型 而他不是属于Optional里面的.some类型?


提问者:梁华建 2019-01-13 13:26

个回答

  • 慕数据021159
    2019-01-22 12:31:32
    已采纳

    先上代码:

    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("解包失败")

    }