如何使 Array<Any> 相等?
How to make Array<Any> equatable?
我有以下可解码的 class:
class Sample: Decodable {
var something: Array<Any>?
}
extension Sample: Equatable {
static func == (lhs: Sample, rhs: Sample) -> Bool {
return rhs.something ?? [] == lhs.something ?? []
}
}
给我错误类型 Any
不符合协议。
请注意,Array
中的对象类型只有在我收到响应后才会在运行时确定。
需要帮助。
您不能将 Array<Any>
设为 Equatable
或 Decodable
,因为 protocols
都需要 Array's
Element
类型 Equatable
或 Decodable
和 Any
不满足此要求。
您可以做的是,创建您自己的自定义 class
以满足以下要求,
class MyAny: Equatable, Decodable {
static func == (lhs: MyAny, rhs: MyAny) -> Bool {
return lhs.id == rhs.id
}
var id: Int
}
class Sample: Decodable {
var something: Array<MyAny>?
}
我有以下可解码的 class:
class Sample: Decodable {
var something: Array<Any>?
}
extension Sample: Equatable {
static func == (lhs: Sample, rhs: Sample) -> Bool {
return rhs.something ?? [] == lhs.something ?? []
}
}
给我错误类型 Any
不符合协议。
请注意,Array
中的对象类型只有在我收到响应后才会在运行时确定。
需要帮助。
您不能将 Array<Any>
设为 Equatable
或 Decodable
,因为 protocols
都需要 Array's
Element
类型 Equatable
或 Decodable
和 Any
不满足此要求。
您可以做的是,创建您自己的自定义 class
以满足以下要求,
class MyAny: Equatable, Decodable {
static func == (lhs: MyAny, rhs: MyAny) -> Bool {
return lhs.id == rhs.id
}
var id: Int
}
class Sample: Decodable {
var something: Array<MyAny>?
}