获取此枚举及其后面的三个文字实例:
enum Types {
case string(String), int(Int), bool(Bool)
}
let t1 = Types.string("one")
let t2 = Types.string("two")
let t3 = Types.int(3)
如何对这些内容进行比较以使t1
和t2
匹配(即使它们的值不同,同样的枚举情况),而t1
和t3
则不相同匹配(因为它们是相同枚举的不同情况),像这样?:
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"
答案 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"
}