//一. 基本运算符(Basic Operators)
//数字运算符,逻辑运算符等大多数标准的C语言运算符,数字运算符可以检测运算结果避免溢出(超出存储类型允许的值的范围)
//1. 一元运算符(Unary operators)
//赋值运算符(Assignment Operator): =
let b = 7; var a = 10; a = b
var (x, y) = (1, 2)
/*
和C ,OC 的赋值运算符不同,Swift中的赋值运算符不会返回一个值
if x = y {
//不合法的语句
}
*/
//2. 二元运算符(Binary operators)
//和C ,OC 的数字运算符不同,Swift中的数字运算符不允许值溢出,可以使用Swift的溢出运算符来操作
//(1) + 运算符, + 支持字符串拼接
print("hello, " + "world") //输出:hello, world
// + , - 用于一元运算符时表示正负
let minusSix = -6; let alsoMinusSix = +minusSix
//(2) 求余运算符(Remainder Operator): %
// -9 % 4 = -1 9 % -4 = -1
//(3) 复合赋值运算符(Compound Assignment Operators)
var aNum = 1; a += 2 //a = a + 2
//复合运算符没有返回值,不能用来赋值
// let b = a += 2 (不合法)
//(4) 比较运算符: ==,>,<,!=,>=,<=, 比较运算符不能用于波尔值比较
//3. 验证运算符(identity operators)
//Swift 提供了两个验证运算符identity operators (=== 和 !==),用来检验两个对象的指针是否指向同一个实例变量
//4. 元组的比较
//两个元组包含元素的个数和对应元素的类型相同才能比较,从左到右逐个比较,比较出第一个后其余的忽略
//元组比较只能用于比较小于七个元素的元组
(1, "zebra") < (2, "apple") //true, 1 < 2为真, zebra和apple没有比较
(3, "apple") < (3, "bird") //true, 3 = 3, apple 第一个字母小于 bird 第一个字母
(4, "dog") == (4, "dog") //true
//5. 三元运算符(Ternary operators)
//和C语言一样,Swift只有一个三元条件运算符 (a ? b : c)
//计算tableView 行高,如果有header, 行高比内容高度高50, 没有高20
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
//6. 空合运算符(Nil-Coalescing Operator)
// a ?? b , a为可选类型
//如果a不为nil解包a的值返回,否则返回b。如果a非空,不会再评估b的值(短路评估short-circuit evaluation)
//相当于 a != nil ? a! : b
let defaultColorName = "red"
var userDefinedColorName: String? //userDefinedColorName 为nil
var colorNameToUse = userDefinedColorName ?? defaultColorName // colorNameToUse值为red
//二. 区间运算符(Range Operators)
//1. 闭区间运算符(Closed Range Operator)
//表达形式: a...b, 包含a, b, a 不能大于 b, 适用于for in循环
for index in 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
//2. 半开区间运算符(Half-Open Range Operator)
//表达形式: a..<b, 包含a, 不包含b, a不能大于b。适用于数组遍历
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
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
//3. 单边区间(One-Sided Ranges)
//封闭范围运算符的特殊形式,从一边开始直到结束,包括开始值
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 类型为PartialRangeThrough<Int>
range.contains(7) //false
range.contains(4) //true
range.contains(-1) //true
//三.逻辑运算符(Logical Operators)
//与或非: !, &&,||
// a && b, a 为false,不再判断b , 短路评估short-circuit evaluation