• Swift中的常用匹配方式


    在swift中,除了平时oc中所用的匹配时我们还可以这样使用匹配方式

    let pt1 = (x:0.5, y:1)
            
            switch pt1 {
            case (0, 0):
                print("在原点")
            case (0, _):
                print("在x轴")
            case (_, 0):
                print("在y轴")
            case (-1...1, -1...1):
                print("值在-1到1之间")
            case (_, _):
                print("不在x轴或y轴,也不在-1~1之间")
            }
    

    匹配时进行值绑定

            let pt1 = (x:0.5, y:0)
            
            switch pt1 {
            case (let x, 0):
                print("((x), 0) is on x axis")
            case (0, let y):
                print("(0, (y)) is on y axis")
            default:
                break
            }     
    

    自动提取optional的值进行判断:

            let skills: [String?] =
                ["Swift", nil, "PHP", "JavaScirpt", nil]
            
            for case let skill? in skills {
                print(skill) // Swift PHP JavaScript
            }
    

    值类型判定:

            let someValues: [Any] = [1, 1.0, "One"]
            
            for value in someValues {
                switch value {
                case let v as Int:
                    print("Integer (v)")
                case let v as Double:
                    print("Double (v)")
                case let v as String:
                    print("String (v)")
                default:
                    print("Invalid value")
                }
            }
    

    除了使用具体的数值对循环或分支条件约束外,我们还可以使用where进行更复杂的约束, eg:

            for i in 1...10 where i % 2 == 0 {
                print(i)
            }
    

    在实际工作中我们也可以将case、where等多个匹配语句结合来使我们的代码更为简单, eg:假设我们定义下面这样的enum表示手机电量

    enum Power {
        case fullyCharged
        case normal(percentage: Double)
        case outOfPower
    }
    

    然后,定义一个变量battery表示手机电池:

    let battery = Power.normal(percentage: 0.1)
    

    这样,我们就可以在绑定.normal associated value的同时,使用where进一步约束它的关联值了:

    switch battery {
    case .normal(let percentage) where percentage <= 0.1:
        print("Almost out of power") 
    case .normal(let percentage) where percentage >= 0.8:
        print("Almost fully charged")
    default:
        print("Normal battery status")
    }
    

    通过“,”进行多情况判断, eg:

            let pt1 = (x:0, y:1)
            
            switch pt1 {
            case (0, 0):
                print("在原点")
            case (0, _),(_, 0):
                print("在数轴上")
            case (_, _):
                print("不在x轴或y轴,也不在-1~1之间")
            }
    

    同上面的一样,多值判断我们还可以这么使用,可以大大减少代码量, eg:

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

    相对于oc中的多个值分别判断还是方便、简洁了一些的

  • 相关阅读:
    Spring整合CXF之添加拦截器
    Spring整合CXF之发布WebService服务
    CXF添加自定义拦截器
    cxf处理一些Map等复杂类型
    webservice执行过程深入理解
    谈谈房车
    关于贷款消费
    记一次玩比特币的经历
    那年K城暑期工
    SpringBoot整合Xxl-Job
  • 原文地址:https://www.cnblogs.com/GoodmorningMr/p/9628560.html
Copyright © 2020-2023  润新知