Swift的 ?? 运算符

Overview 概述

在这里插入图片描述

Swift 中的??运算符, 官方称之为Nil Coalescing Operator, 中文常被译作空合运算符.

在表达式 a ?? b 中, 将对可选类型 a 进行空判断,如果 a 包含一个值就进行解包,否则就返回一个默认值 b。表达式 a 必须是 Optional 类型。默认值 b 的类型必须要和 a 存储值的类型保持一致。

是对以下代码的简短表达方法:

// 无疑空合运算符(??)提供了一种更为优雅的方式去封装条件判断和解包两种行为,显得简洁以及更具可读性。
a != nil ? a! : b

注意
如果 a 为非空值(non-nil),那么值 b 将不会被计算。这也就是所谓的短路求值

Show Me The Code 代码演示

场景: 在一个手动添加血糖数据记录的页面, 有一个时间选项, 当用户进入页面, 还未选择时, 默认显示当前时间

// 三元运算符
selectTime != nil ? selectTime! : Date()
// 等价的空合运算符
selectTime ?? Date()

Pit Avoidance Guide 避坑指南

使用 ?? 时, 一定要请注意它与其它运算符的优先级, 这是一个很容易犯的错误.

// + 的优先级更高, 当 startDate 不为 nil 时, 并不会 timeIntervalSince1970 然后 + 86400 
startDate?.timeIntervalSince1970 ?? 0 + 86400
// 正确的
(startDate?.timeIntervalSince1970 ?? 0) + 86400
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

依旧风轻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值