Как сделать массив <Any>равным? - PullRequest
0 голосов
/ 20 января 2019

У меня есть следующий декодируемый класс:

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

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

Дает мне тип ошибки Any не соответствует протоколу.

Для любой информации тип объекта в Arrayбудет определено только во время выполнения после получения ответа.

Нужна помощь.

1 Ответ

0 голосов
/ 20 января 2019

Вы не можете сделать 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>?
}
...