zoukankan      html  css  js  c++  java
  • 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中的多个值分别判断还是方便、简洁了一些的

  • 相关阅读:
    C# 综合练习题目 及 答案解析
    SQL数据库子查询练习题及解析
    SQL数据库 连接查询、变量、选择、循环、延时语句等
    SQL数据库中模糊查询、排序、聚合函数、数学函数、字符串函数、时间日期函数、转换、函数转换等
    SQL数据库的创建及简单增删改查语句运用
    SQL数据库简介
    ado.net操作数据库
    轻松美化窗体
    面向对象(委托)
    面向对象(五大原则)
  • 原文地址:https://www.cnblogs.com/GoodmorningMr/p/9628560.html
Copyright © 2011-2022 走看看