if
- Swift 中没有 C 语言中的 非零即真 的概念
- 在逻辑判断时必须显示地指明具体的判断条件 true / false
- if 语句条件的 () 可以省略
- if 语句后的 {} 不能省略
let num = 200 if num < 10 { print("比 10 小") } else if num > 100 { print("比 100 大") } else { print("10 ~ 100 之间的数字") }
可选项判断
- 由于可选项的内容可能为 nil,而一旦为 nil,则不允许参与计算
- 因此有实际开发中,经常需要判断可选项的内容是否为 nil
单个可选项判断
let url = NSURL(string: "http://www.baidu.com") //: 方法1: 强行解包 - 缺陷,如果 url 为空,运行时会崩溃 let request = NSURLRequest(URL: url!) //: 方法2: 首先判断 - 代码中仍然需要使用 `!` 强行解包 if url != nil { let request = NSURLRequest(URL: url!) } //: 方法3: 使用 `if let`,这种方式,表明一旦进入 if 分支,u 就不在是可选项 if let u = url where u.host == "www.baidu.com" { let request = NSURLRequest(URL: u) }
可选项条件判断
- if let 不能与使用 &&、|| 等条件判断
- 如果要增加条件,可以使用 where 子句
- 可以使用 ‘,’ 同时判断多个可选项是否为空
- 变量的作用域仅在 {} 中
- if let 连用,判断对象的值是否为 nil,{} 内一定有值,可以直接使用,不需要解包
- if var 连用,{} 内可以对值进行修改
//: 1> 初学 swift 一不小心就会让 if 的嵌套层次很深,让代码变得很丑陋 if let u = url { if u.host == "www.baidu.com" { let request = NSURLRequest(URL: u) } } //: 2> 使用 where 关键字, if let u = url where u.host == "www.baidu.com" { let request = NSURLRequest(URL: u) } //: 3> 可以使用 `,` 同时判断多个可选项是否为空 let oName: String? = "张三" let oNo: Int? = 100 if let name = oName { if let no = oNo { print("姓名:" + name + " 学号: " + String(no)) } } //: 可以对变量进行修改 if var name = oName, let no = oNo { name = "李四" no = 1 print("姓名:" + name + " 学号: " + String(no)) }
guard
- guard 是与 if let 相反的语法
- 在程序编写时,条件检测之后的代码相对是比较复杂的
- 使用 guard 的好处
- 能够判断每一个值
- 在真正的代码逻辑部分,省略了一层嵌套
let oName: String? = "张三" let oNum: Int? = 18 guard let name = oName else { print("name 为空") return } guard let num = oNum else { print("num 为空") return } // 代码执行至此,name & num 都是有值的 print(name) print(num) /* * guard let & if let 的技巧 * * 使用同名的变量接收值,在后续使用的都是非空值,不需要解包 * 好处:可以避免起名字的烦恼 */ func demo(name: String?, age: Int?) { guard let name = name, age = age else { return } print(name, String(age)) }
Switch
- OC 的 Switch 语法
- 分支值类型必须是 整数
- 每个语句都需要一个 break
- 如果要穿透,省略 break
- 如果要定义局部变量,需要 {}
int num = 9; switch (num) { case 9: case 10: { NSString *name = @“zhang”; NSLog(@“%@“, name); break; } default: break; }
- Swift 中 Switch 的语法
- 可以针对任意类型的值进行分支,不再局限在整数
- 一般不需要 break
- 如果多值,使用 ‘,'
- 所有的分支至少需要一条指令,如果什么都不干,才使用 break
func demo(num: Stirng) { switch num { case “10”, “9”: print(“优") case “8": print(“优") default: print(“一般") } }
For
- 范围 0..<10 表示从 0 到 9
var sum = 0 var sum2 = 0 // 正序遍历 for i in 0..<10 { sum += i } print(sum) // 反序遍历 for i in (0..<10).reversed() { sum2 += i } print(sum2)
- 范围 0...10 表示从 0 到 10
sum = 0 for i in 0...10 { sum += i } print(sum)
- 省略下标
- _ 能够匹配任意类型
- _ 能忽略对应位置的值
for _ in 0...10 { print("hello") }