type
status
date
slug
summary
tags
category
icon
password
example-row
example-row
使用可选类型(optionals)来处理值可能缺失的情况。可选类型表示两种可能:
  1. 有值,解析可选类型访问这个值
  1. 没有值
以下两种声明是相等的:
Int类型有一种构造器,将String值转换为一个Int值。因为该构造器可能会失败,所以他返回一个可选类型(optional)Int,而不是Int类型。

nil

给可选变量赋值为nil表示它没有值,nil不能用于非可选的常量和变量,如果声明一个可选常量或变量但是没有赋值,他们会自动被设置为nil
Swift中的nilOC中的nil并不一样。在OC中是一个指向不存在对象的指针。在Swift中,nil不是指针——它是一个确定的值,用来表示值的缺失。任何类型的可选状态都可以被设置为nil,不只是对象类型。

强制解析

在可选的名字后面加一个!来获取值。 !表示"这个可选类型有值,可以直接使用",这被称为可选值的强制解析。

自动解析

在声明可选变量时,使用!替换?,这样可选变量在使用时不需要再加!来获取值,这被称为自动解析。
可选解包比强制解析就优雅些,它先做是否有值判断。若没有值就返回nil,否则就返回真实值。这样的好处是程序不会崩溃。

可选解包

可选解包比强制解析就优雅些,它先做是否有值判断。若没有值就返回nil,否则就返回真实值。这样的好处是程序不会崩溃。
  1. if - let 语句会检查可选值是否为 nil,如果不是nil,便会解包可选值。
  1. guard let 刚好是 if not let 的意思,可选解包为nil的情况,走guardelse部分,一般直接返回,而正常流程继续执行。其实就是异常流程就直接返回,正常流程继续执行。

可选值绑定

使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。在可选类型中,我们已经使用了可选值绑定。
好处就是判断可选类型是否有值。

空合并运算符

合并方式:a ?? b
  • a是可选项。
  • b是可选项 或者 不是可选项。
  • ba的存储类型必须相同。
  • 如果a不为nil,就返回a
  • 如果anil,就返回b
  • 如果b不是可选项,返回a时会自动解包。
说明:
  • 只有当b不是可选项时,返回a时才会自动解包。
  • 如果b是可选项,返回ab的时候并不会自动解包。
  • ab的存储类型一定要一样。

多重可选项

嵌套使用可选项
说明:
  • 可选项可以包装数据类型,也可以包装可选项。
  • 这里num3使用??也是多重可选项,因此先对10进行包装,再将其包装到num3上。
  • 如果是nil,可选项不管几层包装都是空的。

Object-C中nil与Swift中的nil的区别

  • OCnil是一个指向不存在对象的指针,只有对象类型才能赋值为nil
  • Swiftnil不是指针,是一个确定的值。任何类型的可选状态都可设置为nil,不只是对象类型。
  • OCnil只对类(class)有用。
  • Swift:可选类型对所有的类型都可用且更安全。
  • OC:对nil对象发送消息是安全的,不会崩溃。
  • Swift:可通过可选链实现。

总结:

  1. 声明变量的时候,若存在可能为有值或者没有值的情况,可以考虑使用可选类型。
  1. 可选类型的使用需注意:要解包才能使用。
  1. 对于解包,建议使用可选解包,这样不会导致程序崩溃。
【swift001】基础知识【swift003】错误处理
  • Twikoo