在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