Matriz de objetos SwiftUI con AnyView

Sep 25 2020

Soy nuevo en SwiftUI y estoy probando algunas cosas. Tengo una lista que se está construyendo a partir de una matriz. Quiero crear una navegación en función de la fila en la que se hace clic. Así que construí una estructura con lo siguiente:

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()))
]

Sin embargo, Xcode dice

El tipo 'DiscoverItem' no se ajusta al protocolo 'Equatable'

¿Cómo puedo resolver esto o cuál es la forma correcta de hacerlo?

Respuestas

1 Asperi Sep 25 2020 at 00:26

Es por ello AnyViewque deshabilita la conformidad automática con esos protocolos (porque no se ajusta a ellos).

Aquí hay una posible solución:

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
}