无法在每个循环中从 JSON 访问数组

Posted

技术标签:

【中文标题】无法在每个循环中从 JSON 访问数组【英文标题】:Can't access array from JSON in for each loop 【发布时间】:2020-01-04 15:03:10 【问题描述】:

在我的项目中,我无法访问要用于每个循环的“楼层”。我需要计算环路中建筑物的楼层数。

// MARK: - UcmData
struct UcmData: Codable 
    let buildings: [Building]


// MARK: - Building
struct Building: Codable 
    let id: Int
    let title, subtitle, info, image: String
    let floor: [Floor]


// MARK: - Floor
struct Floor: Codable 
    let number: Int
    let title, subtitle, image: String

import SwiftUI
import Foundation

struct NamJHerduView: View 
    let ucmData = Bundle.main.decode(UcmData.self, from: "ucm_data.json")

    var body: some View 
        ScrollView 
            VStack 
                ForEach(0 ..< ucmData.) //here i need to count floors and use maybe where clause to filter just floors from a special building

【问题讨论】:

您的数据可能包含许多建筑物。 你想要哪个楼的楼层? 假设它将基于建筑物的 id 或标题,我的数据中有 6 个建筑物 【参考方案1】:

添加Identifiable 一致性

struct Building: Codable, Identifiable 

现在您可以在建筑物中循环播放

ForEach(ucmData.buildings)  building in
  Text("Number of floors in \(building.title): \(building.floors.count)")

如果你还需要访问循环中的索引,请看这个答案:How do you use .enumerated() with ForEach in SwiftUI?

【讨论】:

是的,这是通过建筑物循环的,我已经有了,但我不能让它循环通过建筑物的地板,例如根据建筑物 ID 选择的条件 同一个概念,使其符合Identifiable并循环遍历。 我使用 id 参数制作了像 struct Floor: Codable, Identifiable let id, number: Int 这样的 Identifiabale Floor,但我在顶部的第一篇文章中仍然在 VStack 末尾出现错误,即“编译器无法进行类型检查此表达式在合理的时间内;尝试将表达式分解为不同的子表达式"【参考方案2】:

我认为您可能希望组织数据,使其像这样嵌套:

// MARK: - UcmData
struct UcmData: Codable 
    let buildings: [Building]

    // MARK: - Building
    struct Building: Codable 
        let id: Int
        let title, subtitle, info, image: String
        let floor: [Floor]

        // MARK: - Floor
        struct Floor: Codable 
            let number: Int
            let title, subtitle, image: String
        
    

那么每个building 都会有一个floor 数组。

【讨论】:

其实这没什么区别 同意@vadian,不幸的是这没有帮助。

以上是关于无法在每个循环中从 JSON 访问数组的主要内容,如果未能解决你的问题,请参考以下文章

在主活动中从 JSON 访问 null ArrayList

如何在反应打字稿中从json文件中获取和显示数据

在本机反应中从 json 对象访问特定数据

如何循环访问和访问多维和关联数组中的各种元素? PHP,JSON 或 XML

使用c ++在每个循环中从数组中随机选择n个元素

循环和结构数组时打印的值不正确