个人总结Swift 中可选值(Optional)

本文详细介绍了Swift中的可选值Optional,包括Optional的定义、显式和隐式拆包、空运算符、Optional Binding以及Optional Chaining。Optional是一种可以有值或无值的类型,通过显式或隐式拆包来使用其值,Optional Binding和Optional Chaining提高了代码的可读性和安全性。
摘要由CSDN通过智能技术生成

Optional的定义

  Optional是 OC 中没有的数据类型,是苹果在 Swift 中引入的全新类型,它的特点就是可有值,也可以没有值,当它没有值的时候就是 nil. 并且 Swift 中的nil 和 OC 中 nil 也不一样,在 OC 中只有对象才能为 nil, 而在 Swift 中,当基础类型(整型,浮点,布尔等)没有值的时候,也是 nil, 而不是一个初始值,没有初始值的值是不能使用的,所以就产生了 Optional 类型.定义一个 Optional 的值很容易,只需要在类型后面加上问号(?)就行了,例如:

var str: String?
let status: Int? = 1   // 申明可选Int类型的常量,初始值为1 
var defaultAddress: String? = "江苏南京"   // 申明可选String类型的变量,初始值为"江苏南京"
var student: Person? // 申明可选Person(自定义的类)的变量,初始值为nil

注意:
  Int?和 Int 不相同, Int? 代表可选的 Int 类型,可以赋值为 nil, 而 Int 不可以赋值为 nil

  一个 Optional 值和非 Optional 值的区别就在于: Optional 值未经初始化虽然为 nil, 但普通变量未经初始化连 nil 都没有

//未被初始化,但是是一个Optional类型,为nil
var str: String?
str //输出nil
//未被初始化,也不是Optional类型
var str2: String
str2    //使用时出错

Optional 的拆包

显式拆包

  Optional 类型的值不能被直接使用,当需要用时要显示拆包,以表明我知道这个 Optional 是一定有值的:

var str: String? = "Hello World!"
str! //Hello World!

  对比拆包前后, str 的输出

var str: String? = "Hello World!"
str     //{Some "Hello World!"}
str!    //Hello World!

  之所以要拆包使用,是因为 Optional 类型其实是一个枚举:

enum Optional<T> : Reflectable, NilLiteralConvertible 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值