标签:
在Swift中你可以对浮点数进行取余运算( % )
赋值运算 a = b, 表示用 b 的值来初始化或更新 a 的值.
1 let b = 10 2 var a = 5 3 a = b 4 // a 现在等于 10
如果赋值的右边是一个多元组, 它的元素可以马上被分解多个变量或变量
1 let (x, y) = (1, 2) 2 // 现在 x 等于 1, y 等于 2
与C语言和Objective-C不同, Swift的赋值操作并不返回任何值. 所以以下代码是错误的:
1 if x = y { 2 // 此句错误, 因为 x = y 并不返回任何值 3 }
1 1 + 2 // 等于 3 2 5 - 3 // 等于 2 3 2 * 3 // 等于 6 4 10.0 / 2.5 // 等于 4.0
加法操作 + 也用于字符串的拼接:
1 "hello, " + "world" // 等于 "hello, world"
1 9 % 4 // 等于 1 2 -9 % 4 // 等于 -1
注意:在对负数求余时, 负数的符号会被忽略. 这意味着 a % b 和 a % -b的结果是相同的.
1 8 % 2.5 // 等于 0.5
这个例子中, 8除于2.5等于3余0.5, 所以结果是0.5.
1 var i = 0 2 ++i // 现在 i = 1
它们的区别是:
1 var a = 0 2 let b = ++a // a 和 b 现在都是 1 3 let c = a++ // a 现在 2, 但 c 是 a 自增前的值 1
上述例子, let b = ++a, 先把 a 加1了再返回 a 的值. 所以 a 和 b 都是新值 1.
而 let c = a++, 是先返回了 a 的值, 然后 a 才加1. 所以 c 得到了 a 的旧值1, 而 a 加1后变成2.
推荐你使用 ++i 和 --i, 因为先修改后返回这样的行为更符合我们的逻辑.
数值的正负号可以使用前缀 - (即单目负号) 来切换:
1 let three = 3 2 let minusThree = -three // minusThree 等于 -3 3 let plusThree = -minusThree // plusThree 等于 3, 或 "负负3"
注意:单目负号写在操作数之前, 中间没有空格.
单目正号 + 不做任何改变地返回操作数的值.
1 let minusSix = -6 2 let alsoMinusSix = +minusSix // alsoMinusSix 等于 -6
虽然单目 + 做无用功, 但当你在使用单目负号来表达负数时, 你可以使用单目正号来表达正数, 如此你的代码会具有对称美.
Swift也提供把其他运算符和赋值运算 = 组合的复合赋值运算符, 加赋运算 += 是其中一个例子:
var a = 1 a += 2 // a 现在是 3
表达式 a += 2 是 a = a + 2 的简写, 一个加赋运算就把加法和赋值两件事完成了.
注意:复合赋值运算没有返回值, let b = a += 2 这类代码是错误. 这不同于上面提到的自增和自减运算符.
每个比较运算都返回了一个标识表达式是否成立的布尔值:
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"
注意: Swift也提供恒等 === 和不恒等 !== 这两个比较符来判断两个对象是否引用同一个对象实例. 更多细节在 类与结构.
三目条件运算的特殊在于它是有三个操作数的运算符,它的原型是 问题 ? 答案1 : 答案2.它简洁地表达根据 问题 成立与否作出二选一的操作.
如果 问题 成立, 返回 答案1 的结果;
如果不成立, 返回 答案2 的结果.
这里有个计算表格行高的例子. 如果有表头, 那行高应比内容高度要高出50像素; 如果没有表头, 只需高出20像素.
1 let contentHeight = 40 2 let hasHeader = true 3 var rowHeight = contentHeight 4 if hasHeader { 5 rowHeight = rowHeight + 50 6 } else { 7 rowHeight = rowHeight + 20 8 } 9 // rowHeight 现在是 90
使用三目运算符简化后:
let contentHeight = 40 let hasHeader = true let rowHeight = contentHeight + (hasHeader ? 50 : 20) // rowHeight 现在是 90
第二段代码例子使用了三目条件运算, 所以一行代码就能让我们得到正确答案. 这比第一段代码简洁得多, 无需将 rowHeight 定义成变量, 因为它的值无需在 if 语句中改变.
Swift提供了两个方便表达一个区间的值的运算符.闭区间和半闭区间
闭区间运算符 a...b 定义一个包含从 a 到 b (包括 a 和 b)的所有值的区间. 闭区间运算符在迭代一个区间的所有值时是非常有用的, 如在 for-in 循环中:
for index in 1...5 { println("\(index) * 5 = \(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 { println("第 \(i + 1) 个人叫 \(names[i])") } // 第 1 个人叫 Anna // 第 2 个人叫 Alex // 第 3 个人叫 Brian // 第 4 个人叫 Jack
注意: 数组有4个元素, 但 0..count 只数到 3 (最后一个元素的下标), 因为它是半闭区间
逻辑运算的操作对象是逻辑布尔值. Swift支持基于C语言的三个标准逻辑运算
它是一个前置运算符, 需出现在操作数之前, 且不加空格. 读作 非 a,如下:
let allowedEntry = false if !allowedEntry { println("ACCESS DENIED") } // prints "ACCESS DENIED"
let enteredDoorCode = true let passedRetinaScan = false if enteredDoorCode && passedRetinaScan { println("Welcome!") } else { println("ACCESS DENIED") } // 输出 "ACCESS DENIED
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!"
为了一个复杂表达式更容易读懂, 在合适的地方使用括号来明确优先级是很有效的, 虽然它并非必要的. 在上个关于门的权限的例子中, 我们给第一个部分加个括号, 使用它看起来逻辑更明确.
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword { println("Welcome!") } else { println("ACCESS DENIED") } // prints "Welcome!"
这括号使得前两个值被看成整个逻辑表达中独立的一个部分. 虽然有括号和没括号的输出结果是一样的, 但对于读代码的人来说有括号的代码更清晰.可读性比简洁性更重要
原文:http://www.cocoachina.com/ios/20140611/8767.html
2015-03-18
21:46:23
标签:
原文地址:http://www.cnblogs.com/huangzx/p/4344980.html