swift笔记二(基本运算符)

赋值运算符

赋值运算 a = b, 表示用 b 的值来初始化或更新 a 的值.

let b = 10 
var a = 5 
a = b 
// a 现在等于 10 

如果赋值的右边是一个多元组, 它的元素可以马上被分解多个变量或变量

let (x, y) = (1, 2) 
// 现在 x 等于 1, y 等于 2 

数值运算

Swift让所有数值类型都支持了基本的四则运算:

  • 加法 +
  • 减法 -
  • 乘法 *
  • 除法 /
1 + 2       // 等于 3 
5 - 3       // 等于 2 
2 * 3       // 等于 6 
10.0 / 2.5  // 等于 4.0 

加法操作 + 也用于字符串的拼接:
"hello, " + "world" // 等于 "hello, world"
两个字符类型或一个字符类型和一个字符串类型, 相加会生成一个新的字符串类型:

let dog: Character = "d" 
let cow: Character = "c" 
let dogCow = dog + cow 
// 译者注: 原来的引号内是很可爱的小狗和小牛, 但win os下不支持表情字符, 所以改成了普通字符 
// dogCow 现在是 "dc" 

求余运算

求余运算 a % b 是计算 b 的多少倍刚刚好可以容入 a , 多出来的那部分叫余数.
注意:求余运算(%)在其他语言也叫取模运算. 然而严格说来, 我们看该运算符对负数的操作结果, 求余 比 取模 更合适些.

在Swift中这么来表达
9 % 4 // 等于 1
为了得到 a % b 的结果, %计算了以下等式, 并输出余数作为结果:
a = (b × 倍数) + 余数
把 9 和 4 代入等式中, 我们得 1:
9 = (4 × 2) + 1
同样的方法, 我来们计算 -9 % 4 :
-9 % 4 // 等于 -1
把 -9 和 4 代入等式, -2 是取到的最大整数:
-9 = (4 × -2) + -1
在对负数 -b 求余时, -b的符号会被忽略. 这意味着 a % b 和 a % -b的结果是相同的.

浮点数求余计算

不同于C和Objective-C, Swift中是可以对浮点数进行求余的.
8 % 2.5 // 等于 0.5 //这个例子中, 8除于2.5等于3余0.5, 所以结果是0.5.

复合赋值

Swift也提供把其他运算符和赋值运算 = 组合的复合赋值运算符, 加赋运算 += 是其中一个

var a = 1 
a += 2 // a 现在是 3 

表达式 a += 2 是 a = a + 2 的简写, 一个加赋运算就把加法和赋值两件事完成了.
注意:复合赋值运算没有返回值, let b = a += 2 这类代码是错误. 这不同于上面提到的自增和自减运算符.

比较运算

所有标准C中的比较运算都可以在Swift中使用.
等于 a == b
不等于 a != b
大于 a > b
小于 a < b
大于等于 a >= b
小于等于 a <= b

注意: Swift也提供恒等 === 和不恒等 !== 这两个比较符来判断两个对象是否引用同一个对象实例. 更多细节在 类与结构.

每个比较运算都返回了一个标识表达式是否成立的布尔值:

1 == 1   // true, 因为 1 等于 1 
2 != 1   // true, 因为 2 不等于 1 
2 > 1    // true, 因为 2 大于 1 
1 < 2    // true, 因为 1 小于2 
1 >= 1   // true, 因为 1 大于等于 1 
2 <= 1   // false, 因为 2 并不小于等于 1 

比较运算多用于条件语句, 如 if 条件:

let name = "world" 
if name == "world" { 
    println("hello, world") 
} else { 
    println("对不起, \(name), 我不认识你!") 
} 
// 输出 "hello, world", 因为 `name` 就是等于 "world" 

三目条件运算

三目条件运算的特殊在于它是有三个操作数的运算符, 它的原型是 问题 ? 答案1 : 答案2. 它简洁地表达根据 问题 成立与否作出二选一的操作. 如果 问题 成立, 返回 答案1 的结果; 如果不成立, 返回 答案2 的结果.

举个🌰
这里有个计算表格行高的例子. 如果有表头, 那行高应比内容高度要高出50像素; 如果没有表头, 只需高出20像素.

let contentHeight = 40 
let hasHeader = true 
let rowHeight = contentHeight + (hasHeader ? 50 : 20) 
// rowHeight 现在是 90 

区间运算符

闭区间运算符
for index in 1...5 { 
  println("\(index) * 5 = \(index * 5)") 
} 
半闭区间

定义一个从 a 到 b 但不包括 b 的区间. 之所以称为半闭区间

let names = ["Anna", "Alex", "Brian", "Jack"] 
let count = names.count 
for i in 0..<count { 
    println("第 \(i + 1) 个人叫 \(names[i])") 
} 

逻辑运算

逻辑运算的操作对象是逻辑布尔值. Swift支持基于C语言的三个标准逻辑运算.
逻辑非 !a
逻辑与 a && b
逻辑或 a || b

逻辑非

逻辑非运算 !a 对一个布尔值取反, 使得 true 变 false, false 变 true.

let allowedEntry = false 
if !allowedEntry { 
    println("ACCESS DENIED") 
} 
// prints "ACCESS DENIED" 
逻辑与

逻辑与 a && b 表达了只有 a 和 b 的值都为 true 时, 整个表达式的值才会是 true .

let enteredDoorCode = true 
let passedRetinaScan = false 
if enteredDoorCode && passedRetinaScan { 
    println("Welcome!") 
} else { 
    println("ACCESS DENIED") 
} 
// 输出 "ACCESS DENIED 
逻辑或

逻辑或 a || b 是一个由两个连续的 | 组成的中置运算符. 它表示了两个逻辑表达式的其中一个为 true, 整个表达式就为 true.

let hasDoorKey = false 
let knowsOverridePassword = true 
if hasDoorKey || knowsOverridePassword { 
    println("Welcome!") 
} else { 
    println("ACCESS DENIED") 
} 
// 输出 "Welcome!" 
组合逻辑
if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword { 
    println("Welcome!") 
} else { 
    println("ACCESS DENIED") 
} 
// 输出 "Welcome!" 
//这个例子使用了含多个 && 和 || 的复合逻辑. 但无论怎样, && 和 || 始终只能操作两个值. 所以这实际是三个简单逻辑连续操作的结果. 我们来解读一下:
 
//如果我们输入了正确的密码并通过了视网膜扫描; 或者我们有一把有效的钥匙; 又或者我们知道紧急情况下重置的密码, 我们就能把门打开进入.
 
//前两种情况, 我们都不满足, 所以前两个简单逻辑的结果是 false, 但是我们是知道紧急情况下重置的密码的, 所以整个复杂表达式的值还是 true.
使用括号来明确优先级

为了一个复杂表达式更容易读懂, 在合适的地方使用括号来明确优先级是很有效的, 虽然它并非必要的. 在上个关于门的权限的例子中, 我们给第一个部分加个括号, 使用它看起来逻辑更明确.

if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword { 
    println("Welcome!") 
} else { 
    println("ACCESS DENIED") 
} 

这括号使得前两个值被看成整个逻辑表达中独立的一个部分. 虽然有括号和没括号的输出结果是一样的, 但对于读代码的人来说有括号的代码更清晰.

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

推荐阅读更多精彩内容

  • 关于 Swift 重要这个文档所包含的准备信息, 是关于开发的 API 和技术的。这个信息可能会改变, 根据这个文...
    无沣阅读 4,275评论 1 27
  • 由苹果官网翻译得来fork自https://github.com/letsswift/The-Swift-Prog...
    佛祖拿屠刀阅读 410评论 0 1
  • 关于伊始的这段记忆很清楚,2012年十月份左右迷上了一款游戏,那是高二上半学期。当我疯狂喜欢上一个事物的时,会伴随...
    山色风月倦阅读 402评论 1 1
  • 把心放好你才能站的住脚,年纪不大也不要特别的傻,年纪渐长心态更要放好,二十七八岁时,你或许一无所有,婚还没结...
    愚醉阅读 293评论 0 0
  • 武陵江上苦行船,遥记怡然世外仙。 几度横波寻旧梦,恐难再有碧桃源。
    小薇_阅读 359评论 2 6