Swift学习笔记五:控制流

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 语法
    1. 分支值类型必须是 整数
    2. 每个语句都需要一个 break
    3. 如果要穿透,省略 break
    4. 如果要定义局部变量,需要 {}
int num = 9;
 
switch (num)
{
     case 9:
     case 10:
     {
          NSString *name = @“zhang”;
          NSLog(@“%@“, name);
          break;
     }
 
     default:
          break;
}
 
  • Swift 中 Switch 的语法
    1. 可以针对任意类型的值进行分支,不再局限在整数
    2. 一般不需要 break
    3. 如果多值,使用 ‘,'
    4. 所有的分支至少需要一条指令,如果什么都不干,才使用 break
func demo(num: Stirng)
{
     switch num
     {
          case10”, “9”:
               print(“优")
          case8":
               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")
}
 
 
 
原文地址:https://www.cnblogs.com/fanxiaocong/p/6408032.html