以不区分大小写的方式匹配数组中的字符串值关联枚举

Matching string value associative enums in an array in a case insensitive way

您将如何更改此代码以确保 res1res2 都是 true

enum Type: Equatable {
    case int(Int)
    case string(String)
}

func typesContain(_ type: Type) -> Bool {
    let types: [Type] = [.string("abc"), .string("def")]
    return types.contains(type)
}

let res1 = typesContain(.string("abc")) // true
let res2 = typesContain(.string("ABC")) // false

抱歉,如果答案已经存在,我确实进行了搜索,但是...

您只需要自己定义 Equatable 一致性。对于比较两个 string 案例的情况,使用 string.caseInsensitiveCompare 而不是默认的合成实现,它只使用 == 作为两个 String 关联值。

enum Type {
    case int(Int)
    case string(String)
}

extension Type: Equatable {
    static func ==(lhs: Type, rhs: Type) -> Bool {
        switch (lhs, rhs) {
        case (.int(let num), .int(let otherNum)):
            return num == otherNum
        case (.string(let string), .string(let otherString)):
            return string.caseInsensitiveCompare(otherString) == .orderedSame
        default:
            return false
        }
    }
}