• 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")
    }
     
     
     
  • 相关阅读:
    Educational Codeforces Round 95(A-C题解)
    Codeforces Round #669 (Div. 2)A-C题解
    Codeforces Round #668 (Div. 2)A-C题解
    八月第四周总结
    牛客小白月赛27部分题解
    八月第三周总结
    Codeforces Round #665 (Div. 2)A-C题解
    Kubernetes K8S之存储ConfigMap详解
    在Linux下如何根据域名自签发OpenSSL证书与常用证书转换
    Linux系统如何在离线环境或内网环境安装部署Docker服务和其他服务
  • 原文地址:https://www.cnblogs.com/fanxiaocong/p/6408032.html
Copyright © 2020-2023  润新知