Swift 3.0之二、基本运算符

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. 算数运算符

  • 加 ( + ) 加法运算符同时也支持 String 的拼接: "hello, " + "world" // 结果为: "hello, world"
  • 减 ( - )
  • 乘 ( * )
  • 除 ( / )

余数运算符

 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. 比较运算符

  • 值相等 ( a == b )

  • 不相等 ( a != b )

  • 大于 ( a > b )

  • 小于 ( a < b )

  • 大于等于 ( a >= b )

  • 小于等于 ( a <= b )

  • ( === 和 !== )用来判断两个对象的类型是否相同

    元组的比较:从左到右的顺序比较大小,一次一个值,直到找到两个不相等的值为止。举个🌰:

(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 )
  • 逻辑 与 ( a && b )
  • 逻辑 或 ( a || b )

逻辑非运算符

逻辑非运算符( !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!"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 由苹果官网翻译得来fork自https://github.com/letsswift/The-Swift-Prog...
    佛祖拿屠刀阅读 415评论 0 1
  • 运算符 是可以检查,修改或者组合值的特殊符号或者短语。例如,加法运算符(+)将两个数相加,像let i = 1 +...
    BoomLee阅读 1,814评论 0 4
  • 我们总是从小到大,肩负着父母,朋友,亲戚,同学所带给我们的种种头衔与使命,肩负着这个世界带给我们的种种压力与负重,...
    若晨322阅读 198评论 0 0
  • 窗外的雨淅淅沥沥地下着。此刻,电视剧里樊胜美和王柏川的心也在下雨。不!在滴血!我的心也隐隐阵痛。为这对苦命鸳鸯叹息...
    缘梦_17bb阅读 594评论 0 0
  • 这世界太忙了,停不下来了 再见只是不容易再相见了
    柚椎阅读 223评论 1 1