Tableau d'objets SwiftUI avec AnyView
Sep 25 2020
Je suis nouveau sur SwiftUI et j'essaye des choses. J'ai une liste qui est en cours de construction à partir d'un tableau. Je souhaite créer une navigation en fonction de la ligne sur laquelle l'utilisateur a cliqué. J'ai donc construit une structure avec ce qui suit:
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()))
]
Cependant Xcode dit
Le type 'DiscoverItem' n'est pas conforme au protocole 'Equatable'
Comment puis-je résoudre ceci ou quelle est la bonne façon de procéder?
Réponses
1 Asperi Sep 25 2020 at 00:26
Cela est dû à AnyViewqui désactive la conformité automatique à ces protocoles (car ne s'y conforme pas).
Voici une solution possible:
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
}