以不区分大小写的方式匹配数组中的字符串值关联枚举
Matching string value associative enums in an array in a case insensitive way
您将如何更改此代码以确保 res1
和 res2
都是 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
}
}
}
您将如何更改此代码以确保 res1
和 res2
都是 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
}
}
}