Matriz de objetos SwiftUI com AnyView

Sep 25 2020

Eu sou novo no SwiftUI e estou tentando algumas coisas. Eu tenho uma lista que está sendo construída a partir de uma matriz. Quero criar uma navegação dependendo da linha clicada. Então, eu construí uma estrutura com o seguinte:

struct DiscoverItem: Hashable, Equatable {
    var name: String
    var destination: AnyView
}

let arr = [
    DiscoverItem(name: "Catalogus", destination: AnyView(ProductList(products: []))),
    DiscoverItem(name: "Locations", destination: AnyView(LocationList()))
]

No entanto, o Xcode está dizendo

O tipo 'DiscoverItem' não está em conformidade com o protocolo 'Equatable'

Como posso resolver isso ou de que forma é a correta?

Respostas

1 Asperi Sep 25 2020 at 00:26

É devido a AnyViewque desabilita a conformidade automática com esses protocolos (porque não os está em conformidade).

Aqui está uma solução possível:

struct DiscoverItem: Hashable, Equatable {
    static func == (lhs: DiscoverItem, rhs: DiscoverItem) -> Bool {
        lhs.id == rhs.id
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
        hasher.combine(name)
    }

    let id = UUID()
    var name: String
    var destination: AnyView
}