#制御フロー

4019 ワード

if
  • SwiftにはC言語の 概念がない
  • は、論理判断時に特定の判断条件true/false
  • を表示する必要がある.
  • if文条件の()は、
  • を省略することができる.
  • ただし{}
  • を省略することはできない.
    let num = 200
    if num < 10 {
        print("  10  ")
    } else if num > 100 {
        print("  100  ")
    } else {
        print("10 ~ 100      ")
    }
    

    さんもくえんざん
  • Swiftの 演算はOCと一致するスタイル
  • を維持する.
    var a = 10
    var b = 20
    let c = a > b ? a : b
    print(c)
    

    三目を適切に運用することで、コードをより簡潔に書くことができます.
    オプション判定
  • は、オプションのコンテンツが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)
    }
    

    オプション条件判断
    //: 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)
    }
    
  • まとめ
  • if letは、&&||等の条件を用いる判断
  • とはならない.
  • 条件を追加するには、where
  • を使用します.
  • 注意:where句インテリジェントヒント
  • なし

    複数オプション判定
    //: 3>      `,`              
    let oName: String? = "  "
    let oNo: Int? = 100
    
    if let name = oName {
        if let no = oNo {
            print("  :" + name + "   : " + String(no))
        }
    }
    
    if let name = oName, let no = oNo {
        print("  :" + name + "   : " + String(no))
    }
    

    判断後に変数を修正する必要がある
    let oName: String? = "  "
    let oNum: Int? = 18
    
    if var name = oName, num = oNum {
        
        name = "  "
        num = 1
        
        print(name, num)
    }
    

    guard
  • guardif letとは逆の文法であり、Swift 2.0が発売した
  • である.
    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を使用するメリット
  • は、各値
  • を判断することができる.
  • 本当のコード論理部分では、ネストされた
  • を省略している.

    switch
  • switchは整数
  • に限定されない.
  • switchは、 に対して
  • と判断することができる.
  • break
  • は不要
  • caseの後に実行可能な文
  • が必要である.
  • はすべての可能な状況を処理することを保証しなければならない.そうしないと、コンパイラは直接エラーを報告し、処理しない条件はdefault分岐の
  • に置くことができる.
  • caseで定義変数は現在のcaseでのみ有効であり、OCでは{}
  • を使用する必要がある.
    let score = " "
    
    switch score {
    case " ":
        let name = "  "
        print(name + "80~100 ")
    case " ": print("70~80 ")
    case " ": print("60~70 ")
    case " ": print("   ")
    default: break
    }
    
  • switchにおいても同様にwhere
  • を割り当てることができる.
    let point = CGPoint(x: 10, y: 10)
    switch point {
    case let p where p.x == 0 && p.y == 0:
        print("   ")
    case let p where p.x == 0:
        print("Y ")
    case let p where p.y == 0:
        print("X ")
    case let p where abs(p.x) == abs(p.y):
        print("   ")
    default:
        print("  ")
    }
    
  • 条件判断のみが望ましい場合、付与部分は
  • を省略することができる.
    switch score {
    case _ where score > 80: print(" ")
    case _ where score > 60: print("  ")
    default: print("  ")
    }