带有 AnyView 的 SwiftUI 对象数组

标签 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 说

Type 'DiscoverItem' does not conform to protocol 'Equatable'

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

最佳答案

这是由于 AnyView 禁用了自动遵守这些协议(protocol)(因为不符合这些协议(protocol))。

这是可能的解决方案:

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
}

关于带有 AnyView 的 SwiftUI 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64051363/

相关文章:

ios - 在 Swift iOS 中添加工具提示指针

ios - 无法将类型 '__NSArrayM' 的值转换为 'NSDictionary'

swift - iOS 11 UILabel 自动换行在文本太长时不起作用

swift - 搜索包含 1500 个对象的数组是否合乎逻辑?

用于自定义 View 的 SwiftUI ViewModifier

ios - TextField Input 不更新其他类中的@Published ObservedObject (SwiftUI)

SwiftUI 将数据从协调器中获取到内容 View 中

swift - 删除 Objective-C 文件 Xcode 9 Swift 4 后出错

ios - 当我在 SwiftUI 中按下导航后退按钮时,可以添加一些操作吗?

macos - 带有选择器 : selecting does not work for custom type (macOS) 的 SwiftUI 列表