美文网首页
Swift 匹配模式 case

Swift 匹配模式 case

作者: 霸_霸霸 | 来源:发表于2022-09-05 15:16 被阅读0次
      1. 结合struct使用
    struct Children {
        var age: Int
    }
    
    extension Children {
        var hasGoToSchool: Bool {
            if case 0..<3 = age {
                return false
            }
            return true
        }
    }
    

    调用:

    let jack = Children(age: 4)
    print("Jack has go to school: \(jack.hasGoToSchool)")
    

    结果:

    Jack has go to school: true

      1. 结合enum使用
    enum JobElement<TaskID> {
        case next(TaskID)
        case error
        case completed
    }
    
    extension JobElement {
        var currentTaskID: TaskID? {
            if case .next(let taskId) = self {
                return taskId
            }
            return nil
        }
    }
    

    调用:

    let t = JobElement<UInt>.completed
    print("Current task id: \(t.currentTaskID)")
    

    结果:

    Current task id: nil
    Current task id: Optional(3)

      1. 结合数组
    let cs = [1, 2, 3]
    for case 1 in cs {
          print("current index: 0")
    }
    

    结果:

    current index: 0

      1. 结合数组和枚举
    enum Medias {
        case music(name: String, author: String)
        case movie(name: String, author: String)
        case book(name: String)
    }
    
    let medias: [Medias] = [.movie(name: "天下无贼", author: "张艺谋"),
                                         .book(name: "朝花夕拾"),
                                         .book(name: "围城"),
                                         .music(name: "江南", author: "cc")
    ]
    for case .book(name: "三体") in medias {
            print("三体")  // 匹配不上,无输出
    }
    
    // 等价于
    for case let .book(name: name) in medias where name == "围城" {
            print("围城")
    }
    

    结果:

    围城

    在不知道name是什么的时候,使用let去匹配

    for case let .book(name: name) in medias {
            print(name)
    }
    // 等价于
    for case .book(name: let name) in medias {
            print(name)
    }
    

    结果都是:

    朝花夕拾
    围城

    相关文章

      网友评论

          本文标题:Swift 匹配模式 case

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