Swift Enum 带有关联值 Associated Values 的比较语法

717 阅读1分钟

Swift 的 enum 可以带有关联值(用法参考:swiftgg.gitbook.io/swift/swift…

当需要筛选比较某一个 case,同时不需要区分 case 的关联值时(需要比较关联值时也提供了示例),可以使用以下的写法来进行比较。 示例中提供了使用 switch-case 语句和使用 if-case 语句实现两种方式。 比较逻辑单一时,建议使用 if-case,写法相对简洁

举例:

b 为带有一个 String 类型关联值的 case,检测是否为 case b 类型。

前两个方法为后两个方法的精简,当不需要关心关联值时,功能一致;需要处理关联值具体值时,可以用后面的方案进一步处理**。**

enum ExampleType {
    case a
    case b(String)
}

// 用 switch case 语句来实现,无需关心关联值
func switchEnum(type: ExampleType) -> Bool {
    switch type {
    case .a:
        return false
    case .b:
        return true
    }
}

// 用 if case 语句来实现,无需关心关联值
func ifEnum(type: ExampleType) -> Bool {
    if case .b = type {
        return true
    }

    return false
}


// 用 switch case 语句来实现,需要关联值进一步处理
func switchEnum2(type: ExampleType) -> Bool {
    switch type {
    case .a:
        return false
    case let .b(string):
        return true
    }
}

// 用 if case 语句来实现,需要关联值进一步处理
func ifEnum2(type: ExampleType) -> Bool {
    if case let .b(string) = type {
        return true
    }
    
    return false
}