Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含AnyView的对象的SwiftUI数组_Swift_Swiftui - Fatal编程技术网

包含AnyView的对象的SwiftUI数组

包含AnyView的对象的SwiftUI数组,swift,swiftui,Swift,Swiftui,我是SwiftUI的新手,正在尝试一些东西。 我有一个列表,它是从一个数组中构建出来的。我想根据单击的行创建导航。因此,我用以下内容构建了一个结构: struct DiscoverItem: Hashable, Equatable { var name: String var destination: AnyView } let arr = [ DiscoverItem(name: "Catalogus", destination: AnyView(

我是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”不符合协议“equalable”


我如何解决这个问题,或者哪种方法才是正确的解决方法?

这是由于
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
}

工作得很有魅力!谢谢你能解释一下它到底是干什么的吗?@Stijn