无法在每个循环中从 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 访问数组的主要内容,如果未能解决你的问题,请参考以下文章