Reputation: 1200
I'm getting an error that Value type of screen
has no member elements
, but looking at my struct I can see it there. Is there a limit in how far my foreach
can drill down to?
Here's where I'm getting the error
ForEach(remedydata?.remedy.content.screens.elements ?? []) { remedy in
If I remove elements
I don't have any issues
My state is set as
@State var remedydata: Welcome? = nil
My struct looks like the below
// MARK: - Welcome
struct Welcome: Codable {
let remedy: Remedy
}
// MARK: - Remedy
struct Remedy: Codable {
let id, tenantID: String
let version: Int
let title, remedyClientID, createdAt, remedyDescription: String
let enabled: Bool
let trigger: Trigger
let requiredHostCapabilities: [RequiredHostCapability]
let localizedStrings: [LocalizedString]
let content: Content
let actor: String
enum CodingKeys: String, CodingKey {
case id
case tenantID = "tenantId"
case version, title
case remedyClientID = "remedyClientId"
case createdAt
case remedyDescription = "description"
case enabled, trigger, requiredHostCapabilities, localizedStrings, content, actor
}
}
// MARK: - Content
struct Content: Codable {
let serializationVersion: Int
let screens: [Screen]
}
// MARK: - Screen
struct Screen: Codable, Identifiable {
let id: Int
let title: String
let elements: [Element]
}
// MARK: - Element
struct Element: Codable, Identifiable {
let id = UUID()
let tag: Tag
let text: String
let action: Action?
Upvotes: 2
Views: 1113
Reputation: 30481
You can't do remedydata?.remedy.content.screens.elements
since remedydata?.remedy.content.screens
is an Array. In the question, you have multiple Element
inside multiple Screen
, which means you have two options:
Element
for a specific Screen
.Element
for each Screen
.To "Display each Element
for a specific Screen
":
ForEach(remedydata?.remedy.content.screens.first?.elements ?? []) { element in
Text(element.text)
}
To "Display a specific Element
for each Screen
":
ForEach(remedydata?.remedy.content.screens ?? []) { screen in
Text(screen.elements.first?.text ?? "")
}
Upvotes: 2