add code highlight
This commit is contained in:
@ -3,6 +3,10 @@
|
||||
> 校对:[EvilCome](https://github.com/Evilcome)
|
||||
> 最终校对:[老码团队翻译组-Tyrion](http://weibo.com/u/5241713117)
|
||||
|
||||
<link rel="stylesheet" href="../assets/css/xcode.css">
|
||||
<script src="../assets/js/highlight.pack.js"></script>
|
||||
<script>hljs.initHighlightingOnLoad();</script>
|
||||
|
||||
# 基本运算符
|
||||
-----------------
|
||||
|
||||
@ -13,7 +17,7 @@
|
||||
- [算术运算符](#arithmetic_operators)
|
||||
- [组合赋值运算符(Compound Assignment Operators)](#compound_assignment_operators)
|
||||
- [比较运算符](#comparison_operators)
|
||||
- [三目运算符(Ternary Conditional Operator)](#ternary_conditional_operator)
|
||||
- [三目运算符(Ternary Conditional Operator)](#ternary_conditional_operator)
|
||||
- [空合运算符](#nil_coalescing_operator)
|
||||
- [区间运算符](#range_operators)
|
||||
- [逻辑运算符](#logical_operators)
|
||||
@ -286,46 +290,46 @@ Swift 也提供恒等`===`和不恒等`!==`这两个比较符来判断两个对
|
||||
rowHeight = rowHeight + 20
|
||||
}
|
||||
// rowHeight 现在是 90
|
||||
|
||||
|
||||
|
||||
第一段代码例子使用了三目运算,所以一行代码就能让我们得到正确答案。这比第二段代码简洁得多,无需将`rowHeight`定义成变量,因为它的值无需在`if`语句中改变。
|
||||
|
||||
三目运算提供有效率且便捷的方式来表达二选一的选择。需要注意的事,过度使用三目运算符会使简洁的代码变的难懂。我们应避免在一个组合语句中使用多个三目运算符。
|
||||
|
||||
<a name="nil_coalescing_operator"></a>
|
||||
## 空合运算符(Nil Coalescing Operator)
|
||||
|
||||
空合运算符(`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`变量被定义为一个可选字符串类型,默认值为nil。由于`userDefinedColorName`是一个可选类型,我们可以使用空合运算符去判断其值。在上一个例子中,通过空合运算符为一个名为`colorNameToUse`的变量赋予一个字符串类型初始值。
|
||||
由于`userDefinedColorName`值为空,因此表达式` userDefinedColorName ?? defaultColorName `返回默认值,即`red`。
|
||||
|
||||
另一种情况,分配一个非空值(`non-nil`)给 `userDefinedColorName`,再次执行空合运算,运算结果为封包在`userDefaultColorName`中的值,而非默认值。
|
||||
|
||||
userDefinedColor = "green"
|
||||
colorNameToUse = userDefinedColorName ?? defaultColorName
|
||||
//userDefinedColor非空,因此colorNameToUsede的值为绿色
|
||||
|
||||
<a name="nil_coalescing_operator"></a>
|
||||
## 空合运算符(Nil Coalescing Operator)
|
||||
|
||||
空合运算符(`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`变量被定义为一个可选字符串类型,默认值为nil。由于`userDefinedColorName`是一个可选类型,我们可以使用空合运算符去判断其值。在上一个例子中,通过空合运算符为一个名为`colorNameToUse`的变量赋予一个字符串类型初始值。
|
||||
由于`userDefinedColorName`值为空,因此表达式` userDefinedColorName ?? defaultColorName `返回默认值,即`red`。
|
||||
|
||||
另一种情况,分配一个非空值(`non-nil`)给 `userDefinedColorName`,再次执行空合运算,运算结果为封包在`userDefaultColorName`中的值,而非默认值。
|
||||
|
||||
userDefinedColor = "green"
|
||||
colorNameToUse = userDefinedColorName ?? defaultColorName
|
||||
//userDefinedColor非空,因此colorNameToUsede的值为绿色
|
||||
|
||||
<a name="range_operators"></a>
|
||||
## 区间运算符
|
||||
|
||||
Reference in New Issue
Block a user