UPGRADE YOUR SKILLS: Learn advanced Swift and SwiftUI on Hacking with Swift+! >>

Vieweing Arrays?

Forums > SwiftUI

Hi! I have these parts in my project:

The struct:

import SwiftUI

struct Brewery: Identifiable {
    var id = UUID()
    var breweryName: String
    var established: String
    var onTap: [TapBeers]
  var bodyText: String
}

struct TapBeers: Identifiable {
    var id = UUID()
    var beerName : String
    var beerType: String
    var beerPrice: String
}

The Data Model:

import SwiftUI

let breweryData: [Brewery] = [

    Brewery(
        breweryName: "Brewery1",
        established: "Established XXXX",
        onTap: [
            TapBeers(
                beerName: ["beer1", "beer2", "beer3"],
                beerType: ["type1", "type2", "type3"],
                beerPrice: ["price1", "price2", "price3"]
            )
        ]
    ),
    Brewery(
        breweryName: "Brewery2",
        established: "Established XXXX",
        onTap: [
            TapBeers(
                beerName: ["beer1", "beer2", "beer3"],
                beerType: ["type1", "type2", "type3"],
                beerPrice: ["price1", "price2", "price3"]
            )
        ]
    )
]

A couple of questions;

1) Why do I get an error in my Data Model saying "Cannot convert value of type '[String]' to expected argument type 'String'"?

2) How should I go around to create Text views of my nested Array [TapBeers]? Let's say I want to display it like this:

  • established
  • breweryName
  • onTap:
    • beerName
    • beerType
    • beerPrice
    • beerName
    • beertype
    • beerPrice
    • ...
  • bodyText

Anyone up for a quick help to a newbie?

Thanks!

2      

i am myself a super newbie but i made the properties in your brewery struct into an array... that solved part of the problem

struct TapBeers: Identifiable {
    var id = UUID()
    var beerName : [String]
    var beerType: [String]
    var beerPrice: [String]
}

2      

did this as well... think its closer to what you intended:

struct Brewery: Identifiable {
    var id = UUID()
    var breweryName: String
    var established: String
    var onTap: [TapBeers]
  var bodyText: String
}

struct TapBeers: Identifiable {
    var id = UUID()
    var beerName : String
    var beerType: String
    var beerPrice: Double
}

let breweryData: [Brewery] = [

    Brewery(
        breweryName: "Brewery1",
        established: "Established XXXX",
        onTap: [
            TapBeers(beerName: "hellBrew", beerType: "Ale", beerPrice: 1.0),
            TapBeers(beerName: "plain", beerType: "Lager", beerPrice: 1.4),
        ],
        bodyText : ""
    ),
    Brewery(
        breweryName: "Brewery2",
        established: "Established XXXX",
        onTap: [
            TapBeers(beerName: "coolBrew", beerType: "Lager", beerPrice: 2.0),
            TapBeers(beerName: "lazyBrew", beerType: "Ale", beerPrice: 3.0)
        ],
        bodyText : ""
    )
]

you might want to rename TapBeers to TapBeer for clarity

2      

Thanks a lot! The last thing you did made it clearer and better I think. Thanks. And if I now want to call this and place them in my content view, any thoughts about the logic and how to do this?

2      

BUILD THE ULTIMATE PORTFOLIO APP Most Swift tutorials help you solve one specific problem, but in my Ultimate Portfolio App series I show you how to get all the best practices into a single app: architecture, testing, performance, accessibility, localization, project organization, and so much more, all while building a SwiftUI app that works on iOS, macOS and watchOS.

Get it on Hacking with Swift+

Sponsor Hacking with Swift and reach the world's largest Swift community!

Archived topic

This topic has been closed due to inactivity, so you can't reply. Please create a new topic if you need to.

All interactions here are governed by our code of conduct.

 
Unknown user

You are not logged in

Log in or create account
 

Link copied to your pasteboard.