【问题标题】:How to make Array<Any> equatable?如何使 Array<Any> 相等?
【发布时间】:2019-06-13 20:09:51
【问题描述】:

我有以下可解码类:

class Sample: Decodable {
    var something: Array<Any>?
}

extension Sample: Equatable {
    static func == (lhs: Sample, rhs: Sample) -> Bool {
        return rhs.something ?? [] == lhs.something ?? []
    }
}

给我错误类型Any不符合协议。

对于每个人的信息,Array 中的对象类型将仅在我收到响应后在运行时确定。

需要帮助。

【问题讨论】:

  • 这毫无意义。整个比较的概念只存在于已知量。
  • ...你无法解码Any任何方式。

标签: arrays swift generics swift4.1


【解决方案1】:

您不能将Array&lt;Any&gt; 设为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>?
}

【讨论】:

  • 谢谢卡姆兰。我可以试试这个方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 2020-11-15
  • 2023-02-03
  • 2019-06-22
  • 1970-01-01
  • 2016-11-06
相关资源
最近更新 更多