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
}