Swift

Swift 3.0之二、基本运算符

2016-12-02  本文已影响7人  麟young

1. 常用术语

运算符包括①一元运算符、②二元运算符、③三元运算符:分别指对一个、两个、三个目标进行操作。
受到运算符影响的值叫做操作数
如:在表达式 1 + 2 中, + 符号是一个二元运算符,其中的两个值 12 就是操作数

2. 赋值运算符

let b = 10
var a = 5
a = b
// a 的值现在是 10
let (x, y) = (1, 2)
// x 等于 1, 同时 y 等于 2

但,swift的赋值运算符无返回值:

if x = y {
    // 这是不合法的, 因为 x = y 并不会返回任何值。
    // 这就避免了赋值符号 (=) 被意外地用于比较符号 (==)
}

3. 算数运算符

余数运算符

 9 % 4   // 结果为: 1
-9 % 4   // 结果为: -1

一元加号运算符

为了和一元减号运算符一起出现时对称,为了美。

let minusSix = -6
let alsoMinusSix = +minusSix // alsoMinusSix 依然是 -6

4. 组合赋值符号

+= -= *= /= %=,举个栗子🌰:

var a = 1
a += 2   // 相当于 a = a + 2, a 现在是 3

5. 比较运算符

(1, "zebra") < (2, "apple")   // true, 因为 1 < 2
(3, "apple") < (3, "bird")    // true, 因为 3 == 3, "apple" < "bird"
(4, "dog") == (4, "dog")      // true, 因为 4 == 4, "dog" == "dog"

注意: 比较运算符仅支持小于七个元素的元组

6. 三元条件运算符

不使用三元运算符:

let contentHeight = 40
let hasHeader = true
var rowHeight = contentHeight
if hasHeader {
    rowHeight = rowHeight + 50
} else {
    rowHeight = rowHeight + 20
}
// rowHeight is equal to 90

使用三元运算符:

let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)

7. 合并空值运算符(??)

a ?? b 等价于 a != nil ? a! : b, 举个🌰:

let defaultColorName = "red"
var userDefinedColorName: String? // userDefinedColorName 默认为 nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// 因为userDefinedColorName 为 nil, 所以 colorNameToUse 被设置为 defaultColorName, 即"red"。

8. 区间运算符

闭区间运算符 ( ... )

举个🌰:

for index in 1...5 { // 包含 1 到 5
    print("\(index) times 5 is \(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25

半开区间运算符 ( ..<)

举个🌰:

let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count  // count 为 4
for i in 0..<count {     // 0, 1, 2, 3, 但不包含4.
    print("Person \(i + 1) is called \(names[i])")
}
// Person 1 is called Anna
// Person 2 is called Alex
// Person 3 is called Brian
// Person 4 is called Jack

9. 逻辑运算符

逻辑非运算符

逻辑非运算符( !a )转换布尔值, 把true变成false, 把false变成true 。如:

let allowedEntry = false    // 变量的命名要简洁易懂,方便逻辑判断
if !allowedEntry {          // 这里可以读作,“如果不允许进入”
    print("ACCESS DENIED")
}
// 结果为: "ACCESS DENIED"

逻辑与运算符

逻辑与运算符(a && b)需要逻辑表达式的两个值都为true,整个表达式的值才为true 。如果第一个值是 false,第二个值就被忽略,表达式结果直接为false。🌰 :

let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}
// 结果为: "ACCESS DENIED"

逻辑或运算符

逻辑或运算符(a || b)只要有一个为true,那么整个表达式就是true。如果逻辑或运算符左侧的表达式为 true,那么右侧不再考虑,表达式结果直接为false。🌰 :

let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}
// 结果为: "Welcome!"

10. 混合逻辑运算

多个逻辑运算符组合,常用小括号分隔,让代码更好理解。🌰 :

let enteredDoorCode = false
let passedRetinaScan = false
let hasDoorKey = false
let knowsOverridePassword = true
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}
// 结果为: "Welcome!"
上一篇 下一篇

猜你喜欢

热点阅读