swfit ?or !or ??

21 篇文章 0 订阅

在swfit 中多了几个 特殊的符号 通常跟在类型名之后,例如 Int? String?但是这些符号具体是什么含义呢,我这里挨个说一下:


?是swift中一种可选类型 (optional),这个标志着如果 定义如(var aa : String?)这样的形式的例子,那么aa表示并不一定就肯定是String类型的,aa还可能是nil。注意两点:1️⃣?必须紧跟类型之后,例如String和?之间是紧跟着的。2️⃣nil在swift也被认为是一种类型。
通俗的将,这里声明了一个 aa 如果有值 aa就是String类型,如果没有赋值,那么就是nil

如下图所示:
在这里插入图片描述
在断点处,还没有对bigQuestion赋值,那么此时他是nil类型
如下图:
在这里插入图片描述
如果像这样显示的为bigQuestion赋值,那么此时他就是 String 类型


如果想要操作 经 ? 修饰的变量 (即 操作optional的变量) 这时,需要先进行解包,然后才能操作这时 ‘!’派上用场了
! 表示强解包,使用时需注意 如果该对象显示赋值了 强解包会得到变量的值,如果对nil强解包,会crash。

什么叫操作 optional 变量呢 例如 使 bigQuestion 参与 if 判断,是无法直接参与的。如图提示:
在这里插入图片描述
大意是说 optional 类型的 不能被用于一个bool判断,根据提示修改做判断即可。
在这里插入图片描述
再 对 bigQuestion进行字符串 拼接操作,会有这样的提示,他的提示大意如下在这里插入图片描述
因此对于这样的用法,应该这样修改
在这里插入图片描述

如果对没有显示赋值的变量强制解包,会crash如下图
在这里插入图片描述

??
表示我们对optional类型设置默认值,当bigQuestion没有显示设置初始值时,可以对bigQuestion强解包,也可以 使用 ‘??’设置默认值。
如下图:
在这里插入图片描述
我们对他设置 default value
但是怎么设置了默认值之后还是汇报之前的错呢
在这里插入图片描述
别着急,这里有个问题,需要特别注意一下: "+“运算符的优先级比”??"高,因此加上一个小括号,就可以了
在这里插入图片描述

我是磊怀 2849765859 QQ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值