如何比较同一个Swift枚举的不同实例?

时间:2018-03-20 11:15:48

标签: ios swift types enums

获取此枚举及其后面的三个文字实例:

enum Types {
    case string(String), int(Int), bool(Bool)
}

let t1 = Types.string("one")
let t2 = Types.string("two")
let t3 = Types.int(3)

如何对这些内容进行比较以使t1t2匹配(即使它们的值不同,同样的枚举情况),而t1t3则不相同匹配(因为它们是相同枚举的不同情况),像这样?:

func compare (lhs: Types, rhs: Types) -> Bool {
    return lhs == rhs
}

print(compare(lhs: t1, rhs: t2)) // prints "true"
print(compare(lhs: t1, rhs: t3)) // prints "false"

1 个答案:

答案 0 :(得分:3)

您可以通过将Types符合Equatable协议来实现这一目标:

extension Types: Equatable {
    static func == (lhs: Types, rhs: Types) -> Bool {
        switch (lhs, rhs) {
        case (.string, .string), (.int, .int), (.bool, .bool):
            return true
        default:
            return false
        }
    }
}

print(t1 == t2) // true
print(t1 == t3) // false

UPD。

您应该考虑格式化代码。 Swift api design guidelines说:

  

遵循案例惯例。类型和协议的名称是UpperCamelCase。其他一切都是lowerCamelCase。

因此,代码中不应出现大写的case

括号内的空格也应该被修剪。

UPD 1。

  

如果我想获得价值"一个"让t1 = Types.String("一个"),这是可能的,如果是这样的话?

不确定。 if case let ...可以为您提供帮助:

if case let .string(value) = t1 {
    print(value) // "one"
}