《swift2.0 官方教程中文版》 第2章-02基本运算符
import Foundation
/*术语***********************************************/
/*赋值运算符***********************************************/ //赋值运算( a = b ),表示用 b 的值来初始化或更新 a 的值: let b = 10 var a = 5 a = b // a 现在等于 10
//如果赋值的右边是一个多元组,它的元素可以马上被分解成多个常量或变量: let (x,y) = (1,2) // 现在 x 等于 1,y 等于 2
//与 C 语言和 Objective-C 不同,Swift 的赋值操作并不返回任何值。所以以下代码是错误的: //if x = y { // // 此句错误,因为 x = y 并不返回任何值 //}
/*算术运算符***********************************************/ //与 C 语言和 Objective-C 不同的是,Swift 默认情况下不允许在数值运算中出现溢出情况。但是你可以使用 Swift 的溢出运算符来实现溢出运算(如 a &+ b )。详情参见溢出运算符 (页 0)。 //加法运算符也可用于 String 的拼接: "hello," + "world" // 等于 "hello,world" let c = "hello,"+"world" print(c)
//在对负数 b 求余时,b 的符号会被忽略。这意味着 a % b 和 a % -b 的结果是相同的。 //不同于 C 语言和 Objective-C,Swift 中是可以对浮点数进行求余的。 let d = 8 % 2.5 // 等于 0.5 print(d)
//当 ++ 前置的时候,先自増再返回。 //当 ++ 后置的时候,先返回再自增。 //例如: var a1 = 0 let b1 = ++a1 // a1 和 b1 现在都是 1 let c1 = a1++ // a1 现在 2,但 c1 是 a1 自增前的值 1
//除非你需要使用 i++ 的特性,不然推荐你使用 ++i 和 --i,因为先修改后返回这样的行为更符合我们的逻辑。
/*复合赋值***********************************************/ //复合赋值运算没有返回值,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
/*三目运算符***********************************************/ //这里有个计算表格行高的例子。如果有表头,那行高应比内容高度要高出50点;如果没有表头,只需高出20点: let contentHeight = 40 let hasHeader = true let rowHeight = contentHeight + (hasHeader ? 50 : 20) // rowHeight 现在是 90
/*空合运算符***********************************************/ //空合运算符( a ?? b )将对可选类型 a 进行空判断,如果 a 包含一个值就进行解封,否则就返回一个默认值 b .这个运算符有两个条件: //? 表达式 a 必须是Optional类型 //? 默认值 b 的类型必须要和 a 存储值的类型保持一致
//下文例子采用空合并运算符,实现了在默认颜色名和可选自定义颜色名之间抉择: let defaultColorName = "red" var userDefinedColorName: String? //默认值为 nil var colorNameToUse = userDefinedColorName ?? defaultColorName // userDefinedColorName 的值为空,所以 colorNameToUse 的值为 "red" // 即如下表达式的简写 //var colorNameToUse = userDefinedColorName != nil ? userDefinedColorName! : defaultColorName print(colorNameToUse)
//另一种情况,分配一个非空值( non-nil )给 userDefinedColorName,再次执行空合运算,运算结果为封包在 serDefaultColorName 中的值,而非默认值。 userDefinedColorName = "green" colorNameToUse = userDefinedColorName ?? defaultColorName print(colorNameToUse) // userDefinedColorName 非空,因此 colorNameToUse 的值为 "green"
/*区间运算符***********************************************/ //闭区间运算符( a...b )定义一个包含从 a 到 b (包括 a 和 b )的所有值的区间,b 必须大于等于 a 。 ? 闭区 间运算符在迭代一个区间的所有值时是非常有用的,如在 for-in 循环中: for index in 1...5 { print("(index) * 5 = (index * 5)") } //半开区间( a..<b )定义一个从 a 到 b 但不包括 b 的区间。 之所以称为半开区间,是因为该区间包含第一个值 而不包括最后的值。 for index in 1..<5 { print("(index) * 5 = (index * 5)") } let j = 10 let j2 = 20 for index in j..<j2 { print("====(index) * 5 = (index * 5)") }
//半开区间的实用性在于当你使用一个从0开始的列表(如数组)时,非常方便地从0数到列表的长度。 let names = ["Anna","Alex","Brian","Jack"] for i in 0..<names.count { print("第 (i + 1) 个人叫 (names[i])") }
/*逻辑运算***********************************************/ //逻辑非运算( !a )对一个布尔值取反,使得 true 变 false,false 变 true 。 //它是一个前置运算符,需紧跟在操作数之前,且不加空格。读作 非 a,例子如下: let allowedEntry = false if !allowedEntry { print("ACCESS DENIED") } // 输出 "ACCESS DENIED"
//逻辑与(a && b)表达了只有 a 和 b 的值都为 true 时,整个表达式的值才会是 true 。 //只要任意一个值为 false,整个表达式的值就为 false 。事实上,如果第一个值为 false,那么是不去计算第二 个值的,因为它已经不可能影响整个表达式的结果了。这被称做“短路计算 let enteredDoorCode = true let passedRetinaScan = false if enteredDoorCode && passedRetinaScan { print("Welcome!") } else { print("ACCESS DENIED") } // 输出 "ACCESS DENIED"
//逻辑或( a || b )是一个由两个连续的 | 组成的中置运算符。它表示了两个逻辑表达式的其中一个为 true,整个 表达式就为 true 。 //同逻辑与运算类似,逻辑或也是“短路计算”的,当左端的表达式为 true 时,将不计算右边的表达式了,因为它 不可能改变整个表达式的值了。 let hasDoorKey = false let knowsOverridePassword = true if (hasDoorKey || knowsOverridePassword) { print("Welcome!") } else { print("ACCESS DENIED") } // 输出 "Welcome!"
// Swift 逻辑操作符 && 和 || 是左结合的,这意味着拥有多元逻辑操作符的复合表达式优先计算最左边的 子表达式。 if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword { print("Welcome!") } else { print("ACCESS DENIED") } // 输出 "Welcome!" //如果我们输入了正确的密码并通过了视网膜扫描,或者我们有一把有效的钥匙,又或者我们知道紧急情况下重置的密码,我们就能把门打开进入。
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword { print("Welcome!") } else { print("ACCESS DENIED") } // 输出 "Welcome!" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- unity基础开发----Unity3DuniSWF MovieClipBehav
- ruby-on-rails – Rails路由子域的重定向
- c# – 如何在WPF上使用ICommand的CanExecute方法
- vue利用axios来完成数据的交互
- 枚举 – 创建用于在swift中定义常量的类
- c# – 从Code Behind在MVC中生成Url
- ruby-on-rails – rails 3.2.8 ruby?? 1.9.3 on
- ruby-on-rails – 不能将datetime_select与Mongo
- ios – 在UISplitView中选择导航后,DetailView消
- c# – 关于应用程序没有在XP / W2K3中获得焦点的