SwiftUI对象数组与AnyView

时间:2020-09-24 17:20:16

标签: swift swiftui

我是SwiftUI的新手,我正在尝试一些东西。 我有一个正在从数组中构建的列表。我想根据单击的行创建一个导航。因此,我使用以下内容构建了一个结构:

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

但是Xcode在说什么

类型'DiscoverItem'不符合协议'平等'

我该如何解决?或者哪种方法才是正确的方法?

1 个答案:

答案 0 :(得分:1)

这是由于AnyView禁用了自动符合那些协议的原因(因为不符合它们)。

这是可能的解决方案:

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
}