浅析swift optional

1.为什么使用optional

由于swift语言是类型安全的,即在初始化变量或常量时,不能将其赋值为nil,否则会报错:

var a = nil

然而,我们在定义变量时并不一定要初始化,函数的返回值并不一定有具体的值,这就为我们使用变量带了不便,故swift提供了optional,即可选类型,来缓解这个问题。

可选类型,顾名思义即使用该类型的声明的变量可以有值,亦可以没有值(nil)。

2.optional的使用

在swift中,在声明变量的类型后面加上?即可申明可选类型:

var str: String? = "abc"

由于可选类型变量的值有可能为nil,故不能直接使用,在swift中,主要有以下四种方式使用optional:

  • optional拆包

    var str: String? = "abc"
    print(str!.count)	// 使用!进行拆包
    

  • optional隐式拆包

    var str: String? = "abc"
    print(str!.count)
    

  • optional binding

    var str: String? = "abc"
    if let realStr = atr {
    	print(realStr.count)
    }
    

  • optional选择链

    var str: String? = "abc"
    let count = str?.count	// count仍是可选类型
    // 对count使用拆包方式进行访问
    if count != nil {
      let lastIndex = count! - 1
      print(lastIndex)
    }
    

3.optional原理浅析

optional并不是swift语言本身带有的特性,而是通过枚举实现的,下图是swift源码截图

我们可以通过如下方式定义可选类型,其效果完全等同于上述使用?的方式

var str: Optional<String> = "abc"
if let realStr = str {
  print(realStr)
}

我们还可以使用Optional泛型提供的unsafelyUnwrapped方法进行解包:

var str: Optional<String> = "abc"
let count = str.unsafelyUnwrapped.count
print(count)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值