Swift 4官方文档中文版/ Basic Operators(下)
翻译 : Jonhory (简书 / GitHub) 校对 : Stevin三天三夜 (Blog / GitHub) 译者心声我们会不定期的更新翻译文章,如感兴趣,可以关注<我们的简书,获取翻译组更多文章>
本篇包含内容:
空合运算符(Nil-Coalescing Operator)空合运算符( 空合运算符是对下面的代码的简短表达: a != nil ? a! : b
上述代码使用了三目运算符。当可选类型
下面的例子使用空合运算符,实现了在默认颜色名和可选自定义颜色名之间的选择: let defaultColorName = "red"
var userDefinedColorName: String? // 默认值为 nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName 值为 nil,所以 colorNameToUse 值被设置为 "red"
如果你分配一个非空值给 userDefinedColorName = "green"
colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName 的值非 nil,所以 colorNameToUse 的值被设置为 "green"
区间运算符(Range Operators)Swift 提供几个方便表达一个区间的值的区间运算符。 闭区间运算符闭区间运算符( 闭区间运算符在遍历一个区间的所有值时是非常有用的,如在 for index in 1...5 {
print("(index) times 5 is (index * 5)")
}
// 1 * 5 = 5
// 2 * 5 = 10
// 3 * 5 = 15
// 4 * 5 = 20
// 5 * 5 = 25
关于 半开区间运算符半开区间运算符( 半开区间运算符在你使用一个从0开始的列表(如数组)时尤其有效,非常方便地从0数到(但不包括)列表的长度: let names = ["Anna","Alex","Brian","Jack"]
let count = names.count
for i in 0..<count {
print("Person (i + 1) is called (names[i])")
}
// 第1个人叫 Anna
// 第2个人叫 Alex
// 第3个人叫 Brian
// 第4个人叫 Jack
注意这个数组有4个元素,但 单向区间闭区间运算符在某一个方向上的连续取值有另一种形式的表达——比如,一个包含所有数组元素的区间,从下标2到数组的末尾。在这些情况下,你可以省略范围运算符一侧的值。这种区间被称为单向区间是因为该运算符只需一侧的值。如下: for name in names[2...] {
print(name)
}
// Brian
// Jack
for name in names[...2] {
print(name)
}
// Anna
// Alex
// Brian
半开区间运算符在有最后的值的时候也有单向区间表达。就像你需要一个在范围内但不包括末尾的区间的时候。如下: for name in names[..<2] {
print(name)
}
// Anna
// Alex
单向区间可以在别的上下文中使用,不止是下标。你不能遍历省略第一个值的单向区间,因为不明确从哪里开始遍历。你可以遍历省略最终值的单向区间;然而,因为这个区间会无限循环,请确保为该循环添加明确的结束条件。你可以检查一个单向区间是否包含特定值,如下面的代码所示。 let range = ...5
range.contains(7) // false
range.contains(4) // true
range.contains(-1) // true
逻辑运算符(Logical Operators)逻辑运算符的操作对象是逻辑布尔值。Swift 支持基于 C 语言的三个标准逻辑运算符:
逻辑非运算符逻辑非运算符( 逻辑非运算符是一个前置运算符,需要跟在操作数之前,且不加空格。读作 let allowedEntry = false
if !allowedEntry {
print("ACCESS DENIED")
}
// 输出 "ACCESS DENIED"
语句 在上述例子中,小心地选择布尔常量或变量有助于代码的可读性,同时应避免使用双重逻辑非或混乱的逻辑语句。 逻辑与运算符逻辑与运算符( 只要任一值为 如下例,只有两个 let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// 输出 "ACCESS DENIED"
逻辑或运算符逻辑或运算符( 与逻辑与运算符类似,逻辑或运算符也是“短路计算”的。当左侧的表达式为 在下面的例子中,第一个 let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// 输出 "Welcome!"
逻辑运算符组合计算你可以组合多个逻辑运算符来表达一个复合逻辑: if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// 输出 "Welcome!"
在这个例子中使用了多个 如果我们输入正确的密码( 基于
使用括号以明确优先级为了使一个复合表达式更易理解,有时使用括号来明确优先级是有效的,即使它并不是必要的。在关于门的权限的例子中,给第一部分加上括号,使它看起来逻辑更明确: if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// 输出 "Welcome!"
这个括号使前两个值被看成整个逻辑表达式中独立的一部分。虽然整个表达式的结果是一样的,但对于读代码的人而言有括号的更易读懂。可读性比简洁性更重要,请在可以让你代码变清晰的地方加个括号吧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |