为了账号安全,请及时绑定邮箱和手机立即绑定

课程

\

关注
梁华建

关于wrap的问题


let name = Optional.some("daniel")

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

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


2019-01-13 253 浏览 1 回答

最佳回答

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

}


梁华建 (提问者)

对 是枚举类型,我还以为现在没人学Swift了 没看到什么人问答哈哈

#1 2019-01-30 回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信