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
}