快速模式匹配-多个枚举模式在守护中吗?

问题描述 投票:0回答:1

使用枚举大小写并进行保护以允许进行不止一种情况的正确语法是什么?

使用switch,我们可以使用case-item-list组合开关盒。

guardif语句是否有类似内容?

这是我想做的一些代码示例...

enum Thingy {
    case one
    case two
    case three
}

func doSomething(with value: Thingy) {
    switch value {
    case .one, .three:
        print("I like these numbers")
    default:
        print("Two")
    }
}

// Doesn't compile
func doSomethingAlt(with value: Thingy) {
    guard .one, .three = value else {
        print("Two")
        return
    }

    print("I like these numbers")
}

swift switch-statement guard-statement
1个回答
0
投票

您只需要提供由OR||)条件分隔的条件。方法如下:

func doSomethingAlt(with value: Thingy) {
    guard value == .one || value == .three else {
        print("Two")
        return
    }

    print("I like these numbers")
}

[这将要求enum符合Equatable。没有关联值或带有Enumsraw-type自动符合Equatable。由于Swift 4.1枚举甚至具有关联类型的情况也自动符合Equatable。这是一些代码:

enum Thingy: Equatable {
    case one(String)
    case two
    case three
}
func doSomethingAlt(with value: Thingy) {
    guard value == .one("") || value == .three else {
        print("Two")
        return
    }

    print("I like these numbers")
}

并且,由于Swift 5.1枚举关联的类型可以具有默认值。这是一个很棒的功能,因此您只需要执行以下操作:

enum Thingy: Equatable {
    case one(String = "")
    case two
    case three
}
func doSomethingAlt(with value: Thingy) {
    guard value == .one() || value == .three else {
        print("Two")
        return
    }

    print("I like these numbers")
}
© www.soinside.com 2019 - 2024. All rights reserved.