空合运算符(Nil Coalescing Operator)

用于取代3目判空运算,提供超短的写法
比如常规判空写法如下,反正我写java就是这么干的

var anOptionalInt: Int? = 10var anInt: Int = 0if anOptionalInt != nil {
anInt = anOptionalInt!
}

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

空合运算符是对以下代码的简短表达方法:

a != nil ? a! : b

上述代码使用了三元运算符。当可选类型 a 的值不为空时,进行强制解封(a!),访问 a 中的值;反之返回默认值 b。无疑空合运算符(??)提供了一种更为优雅的方式去封装条件判断和解封两种行为,显得简洁以及更具可读性。

下文例子采用空合运算符,实现了在默认颜色名和可选自定义颜色名之间抉择:

let defaultColorName = "red"
var userDefinedColorName: String? //默认值为 nil

var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName 的值为空,所以 colorNameToUse 的值为 "red"

userDefinedColorName 变量被定义为一个可选的 String 类型,默认值为 nil。由于 userDefinedColorName 是一个可选类型,我们可以使用空合运算符去判断其值。在上一个例子中,通过空合运算符为一个名为 colorNameToUse 的变量赋予一个字符串类型初始值。 由于 userDefinedColorName 值为空,因此表达式 userDefinedColorName ?? defaultColorName 返回 defaultColorName 的值,即 red。

闭区间运算符

区间运算用于循环,闭区间意思是全部范围都需要,用于替代(i>=1 && i<=5)

for index in 1...5 {
print("\(index) * 5 = \(index * 5)")
}
// 1 * 5 = 5
// 2 * 5 = 10
// 3 * 5 = 15
// 4 * 5 = 20
// 5 * 5 = 25

半开区间运算符

半开区间运算符(a..<b)定义一个从 a 到 b 但不包括 b 的区间。 之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。

半开区间的实用性在于当你使用一个从 0 开始的列表(如数组)时,非常方便地从0数到列表的长度。

let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
print("第 \(i + 1) 个人叫 \(names[i])")
}
// 第 1 个人叫 Anna
// 第 2 个人叫 Alex
// 第 3 个人叫 Brian
// 第 4 个人叫 Jack

数组有 4 个元素,但 0..<count 只数到3(最后一个元素的下标),因为它是半开区间。

单侧区间

闭区间操作符有另一个表达形式,可以表达往一侧无限延伸的区间 —— 例如,一个包含了数组从索引 2 到结尾的所有值的区间。在这些情况下,你可以省略掉区间操作符一侧的值。这种区间叫做单侧区间,因为操作符只有一侧有值。例如:

for name in names[2...] {
print(name)
}
// Brian
// Jackfor name in names[...2] {
print(name)
}
// Anna
// Alex
// Brian

半开区间操作符也有单侧表达形式,附带上它的最终值。就像你使用区间去包含一个值,最终值并不会落在区间内。例如:

for name in names[..<2] {
print(name)
}
// Anna
// Alex

Swift中空合运算符、闭区间运算符、单侧区间、半开区间相关推荐

  1. 快看Sample代码,速学Swift语言(3)-运算符

    运算符是用来检查,更改或组合值的特殊符号或短语.Swift提供的很多常规的运算符,如+.-.*./.%.=.==等,以及逻辑运算的&&.||等等,基本上不需要重复介绍,我们在这里只需要 ...

  2. Java运算符使用、单目、二目运算符、数据类型精度运算问题等

    前言:   Java提供了丰富的运算符,例如算术运算符.关系运算符.逻辑运算符.位运算符等:      其中又分有单目运算符和二目运算符: 一.单目运算符:只对单独一个操作元(变量)进行操作: --- ...

  3. Swift中的区间运算符和半开区间运算符

    2019独角兽企业重金招聘Python工程师标准>>> 区间,使用三个点表示(a...b),表示从a到b,包含a和b,b要大于a,包含第一个和最后一个 半开区间,(a..<b) ...

  4. 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )

    文章目录 函数重载 运算符重载 ( 类内部定义云算符重载 ) 运算符重载 ( 类外部定义运算符重载 ) 可重载的运算符 拷贝构造方法 编译器优化 ( RVO 优化 | NRVO 优化 ) 完整代码示例 ...

  5. 运算符--位移运算符和一些其他运算符

    移位运算符 移位运算符就是在二进制的基础上对数字进行平移.按照平移的方向 和填充数字的规则分为三种:<<(左移).>>(带符号右移)和>>>(无符号右移). ...

  6. c++语言运算符,c++运算符

    运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是'+'. 中文名 C++运算符 用    途 执行程序代码运算含    义 针对以上操作数项 ...

  7. 单侧游离端缺失设计图_单侧游离端附着体义齿的应力中断设计及其力学传导分析...

    弹性附着体义齿是一种高效的可摘局部义齿修复形式[,在修复远中游离端缺失时可以显著减少基牙受到的不良扭转力[.然而,由于弹性附着体的缓冲作用,基牙承受的咬牙合力向远中基托转移导致基托下方黏膜组织负担增加 ...

  8. java自定义运算符_Java运算符

    Java运算符 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量. 我们把运算符具体分为:算数运算符,比较运算符,逻辑运算符,位运算符,赋值运算符 ...

  9. 单侧游离端缺失设计图_有限元分析辅助单侧后牙游离端缺失种植固定桥修复的设计...

    有限元分析辅助单侧后牙游离端缺失种植固定桥修复的设计 目的:利用三维有限元分析方法探讨修复单侧后牙游离端缺失的种植固定桥科学方法,使之结构和功能更加合理.修复单侧后牙游离端缺失,通过建立该设计的三维有 ...

最新文章

  1. ubuntu软件安装(个人PC)
  2. 设计-直接不等于简单
  3. [MySQL]快速解决is marked as crashed and should be repaired故障
  4. Python Numba CPU下加速
  5. OpenCV3.0.0下的视频稳像代码,效果不错哦
  6. 用面向对象的方法写敲门砖
  7. [JavaWeb-XML]XML概述
  8. python中pycharm倒计时_pycharm中的快捷键和简单设置
  9. React-Native 在 mac 下 build 问题
  10. 将大于2的偶数分解成两个素数之和
  11. Code-NFine:NFine权限控制
  12. 伦敦银实时行情中的引爆点
  13. 你对计算机专业考研知道多少
  14. python爬虫详细-Python爬虫|Python爬虫入门(一):爬虫基本结构简单实例
  15. [1-5] 把时间当做朋友(李笑来)Chapter 5 【小心所谓成功学】 摘录
  16. stata输出四分位、中位数的命令是什么?
  17. 途志:新主播让自己的直播热起来有什么技巧?
  18. Drupal < 7.32 “Drupalgeddon” SQL注入漏洞(CVE-2014-3704)漏洞复现
  19. apple watch更新系统时出现红色感叹号解决方法
  20. 从神龙川到大仙顶——2018秋

热门文章

  1. 如何从0到1打造一款AI产品?
  2. 焦点分析 | 平头哥的首颗 AI 芯片对阿里云来说意味着什么?
  3. 「SAP技术」A项目关联公司间退货STO流程
  4. 计算机视觉领域不同的方向:目标识别、目标检测、语义分割等
  5. 一文读懂AI 与神经网络发展历程
  6. 干货丨从基础知识到实际应用,一文了解「机器学习非凸优化技术」
  7. 《数学之美》第20章 不要把鸡蛋都放到一个篮子里--谈谈最大熵模型
  8. 如何使用华为云的计算资源进行深度学习(ModelArts)
  9. 从世界数字大脑形成看元宇宙未来趋势
  10. 国内整车厂“造芯”还缺什么?