如何更改此代码以确保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
}
}
}