Array objek SwiftUI dengan AnyView

Sep 25 2020

Saya baru mengenal SwiftUI dan saya sedang mencoba beberapa hal. Saya memiliki Daftar yang sedang dibangun dari Array. Saya ingin membuat Navigasi tergantung pada baris yang diklik. Jadi saya telah membangun struct dengan yang berikut:

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

Namun Xcode mengatakannya

Jenis 'DiscoverItem' tidak sesuai dengan protokol 'Equatable'

Bagaimana saya bisa mengatasi ini atau cara mana yang tepat untuk melakukan ini?

Jawaban

1 Asperi Sep 25 2020 at 00:26

Itu karena AnyViewyang menonaktifkan penyesuaian otomatis ke protokol tersebut (karena tidak sesuai dengan mereka).

Berikut adalah solusi yang mungkin:

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
}