美文网首页
Swift4:高级样式匹配

Swift4:高级样式匹配

作者: Roct | 来源:发表于2017-11-21 11:38 被阅读39次

    case的使用

    匹配元组是否相等
    let toupleT = (1,2)
    if case (1,2) = toupleT{
        print("两个元组相等")
    }
    
    匹配数组是否包含某个元素
    let arrayT = [1,2,3,4,5]
    for case 5 in arrayT{
        print("包含5")
    }
    
    输出数组里的非空元素
    let skills : [String?] = ["php","Swift",nil,"OC",nil,"JS"]
    for case let skill? in skills{
        print(skill)
    }
    输出:
    /*
    php
    Swift
    OC
    JS
    */
    
    enum Derection{
        case north, south, east, west(abbr: String)
    }
    let west = Derection.west(abbr: "W") //   west("W")
    
    if case Derection.west = west{
        print(derectionStr)   //     west("W")
    }
    if case Derection.west(let derectionStr) = west{
        print(derectionStr)   //     W
    }
    
    

    使用where

    输出0..10里是偶数的数字
    // 输出0..10里是偶数的数字
    for i in 0...10 where i % 2 == 0{
        print(i)
    }
    
    也可以使用在更复杂的情况下

    eg.电量例子

    enum Power{
        case fullyCharged
        case normal(percent : Double)
        case outOfPower
    }
    let bettery = Power.normal(percent: 0.01)
    switch bettery{
    case Power.normal(let percentage) where percentage < 0.1:
        print("out of power")
    case Power.normal(let percentage) where percentage >= 0.9:
        print("almost power")
    default:
        print("normal power")
    }
    
    使用逗号串联条件

    switch中的多个case默认是不向下贯通的,因此,我们不能像C语言一样,通过罗列多个case来实现对多个条件统一处理的效果.要实现这样的效果,我们只能在一条case里,用逗号分隔多个情况:

    switch halfPower {
    // ...
    case .fullyCharged, .outOfPower
        print("Fully charged or out of power")
    // ...
    }
    

    逗号除了用在switch...case...中表示逻辑或的概念,也可以用在if中表示逻辑与的概念,例如为了处理之前电量低的情况,我们还可以用if这样来实现:

    if case .normal(let percentage) = battery,case 0...0.1 = percentage {
        print("Almost out of power")
    }
    

    因此,当我们需要对多个条件递进执行判断的时候,不要写下面这样的if嵌套:

    if A {
        if B {
            if C {
    
            }
        }
    }
    

    完全可以使用逗号把这些条件逐步写在一个if里:

    if A, B, C {
    
    }
    
    使用tuple简化多个条件的比较
    let username = "11@objccn.io"
    let password = 11111111
    

    当我们要同时比较这两个值时,最普通的写法,就是在if中使用逻辑与(&&)操作符:

    if username == "11@objccn.io" && password == 11111111 {
        print("correct")
    }
    

    如果你不喜欢在if中并列多个比较语句,我们还可以用case临时生成一个tuple,并且,让它和username / password进行比较:

    if case ("11@objccn.io", 11111111) = (username, password) {
        print("correct")
    }
    

    相关文章

      网友评论

          本文标题:Swift4:高级样式匹配

          本文链接:https://www.haomeiwen.com/subject/mhmivxtx.html