swift空合运算符和区间运算符

在OC里面我们经常会用到各种运算符,对数据进行处理比如:

1. 赋值运算符:(a = b)

2. 算术运算符: 加法(+)

                         减法(-)

                         乘法(*)

                         除法(/)

3. 求余运算符: (a % b)

4. 自增自减运算符: 自增(++)和自减(--)

5. 比较运算符: 等于(a == b)

                         不等于(a != b)

                         大于(a > b)

                         小于(a < b)

                         大于等于(a >= b)          

                        小于等于(a <= b)

6. 三目运算符: 问题 ? 答案1 : 答案2(它根据问题成立与否作出二选一的操作。如果问题成立,返回答案1的结果; 如果不成立,返回答案2的结果)

7.逻辑运算: 逻辑非(!a)

                     逻辑与(a && b)

                     逻辑或(a || b)

swift新增的运算符

一: 空合运算符

空合运算符(a ?? b)将对可选类型a进行空判断,如果a包含一个值就进行解封,否则就返回一个默认值b.这个运算符有两个条件:

表达式a必须是Optional类型

默认值b的类型必须要和a存储值的类型保持一致

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

a != nil ? a! : b

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

注意:

如果a为非空值(non-nil),那么值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。

另一种情况,分配一个非空值(non-nil)给userDefinedColorName,再次执行空合运算,运算结果为封包在userDefaultColorName中的值,而非默认值。

userDefinedColorName = "green"

colorNameToUse = userDefinedColorName ?? defaultColorName

// userDefinedColorName 非空,因此 colorNameToUse 的值为 "green"

二: 区间运算符

Swift 提供了两个方便表达一个区间的值的运算符。

闭区间运算符

闭区间运算符(a...b)定义一个包含从a到b(包括a和b)的所有值的区间,b必须大于等于a。

闭区间运算符在迭代一个区间的所有值时是非常有用的,如在for-in循环中:

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的区间。之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于 Swift 重要这个文档所包含的准备信息, 是关于开发的 API 和技术的。这个信息可能会改变, 根据这个文...
    无沣阅读 4,444评论 1 27
  • [The Swift Programming Language 中文版]本页包含内容: 运算符是检查、改变、合并值...
    风林山火阅读 561评论 0 0
  • 运算符是检查、改变、合并值的特殊符号或短语。例如,加号+将两个数相加(如let i = 1 + 2)。更复杂的运算...
    穷人家的孩纸阅读 14,995评论 3 6
  • 和丹并肩走在海边,我们的心在静默。蓝色的大海,雪白的浪花没有引起我们丝毫的关注。沉重的步子,踩在沙滩上,缓慢而深长...
    露艺阅读 236评论 0 0
  • “殿下,前头就是南岩村。这雨下得有些大,是否继续赶路?”眼看自家的爷停在路边盯着一名女子的背影发呆,未免大雨沒过半...
    想要忘记阅读 148评论 0 0