Swift 匹配模式 case

2022-09-05  本文已影响0人  霸_霸霸
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

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)

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

结果:

current index: 0

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)
}

结果都是:

朝花夕拾
围城

上一篇下一篇

猜你喜欢

热点阅读