微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以创建一个列表,使每一行链接到 SwiftUI 中的不同 json 文件

如何解决是否可以创建一个列表,使每一行链接到 SwiftUI 中的不同 json 文件

我有一个列表视图,正在查看是否可以将每一行导航到使用不同 JSON 文件的列表视图。如果没有,是否有其他解决方法?这是我目前拥有的代码,并试图将导航链接中的“区域”切换到新的 JSON 文件,但很快意识到它不起作用。

                     NavigationView {
                                Group {
                                    List {
                                        ForEach(regions) { region in 
NavigationLink(destination: RegionListView(regions: region)) {
                                            
                                                RegionButtonView(regions: region)
                                            }
                                        } //: LOOP
                                    } //: LIST
                                } //: GROUP

JSON 文件链接到区域。当我单击特定区域时,我希望它带我到另一个使用不同 JSON 文件创建的列表。这是我用来解码链接到列表循环的 JSON 文件的模型。

struct Region: Codable,Identifiable {
    let id: Int
    let name: String
    let image: String
}

这是我只想让其中一行转到的 JSON 文件。总而言之,我想让每一行导航到使用不同 JSON 文件的视图。

struct SClocations: Codable,Identifiable {
    let id: Int
    let name: String
    let headline: String
    let description: String
    let link: String
    let image: String
    let latitude: Double
    let longitude: Double
    let address: String
}

解决方法

您可以为您拥有的每种类型的 JSON 文件创建一个 可编码 结构。将它们放在 parent 结构中作为可选。使用此父结构的数组创建 List 并将每个项目发送到相应的行详细信息视图。在行详细信息视图中,检查是否有任何子结构具有任何值或为零。

假设您有 Dog 和 Cat 类型的 JSON。现在创建两个子结构名称

struct Dog: Codable,Hashable {
    .....
    .....
}

struct Cat: Codable,Hashable {
    .....
    .....
}

现在,创建父结构体,Animal 如下

struct Animal: Codable,Hashable {
    var cat: Cat?
    var dog: Dog?
}

列表如下:

var animals = [Animal]

List {
      ForEach(animals) { animal in 
           NavigationLink(destination: RegionListView(regions: animal)) {
               RegionButtonView(regions: region)
           }
      }
}

现在,在 RegionListView 中,

if let dog = animal.dog {
    showDogListView(dog)
}else if let cat = animal.cat {
    showCatListView(cat)
} 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。