如何使 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> 设为 EquatableDecodable,因为 protocols 都需要 Array's Element 类型 EquatableDecodableAny 不满足此要求。

您可以做的是,创建您自己的自定义 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>?
}