TEAM LICENSES: Save money and learn new skills through a Hacking with Swift+ team license >>

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      

Hacking with Swift is sponsored by RevenueCat.

SPONSORED Take the pain out of configuring and testing your paywalls. RevenueCat's Paywalls allow you to remotely configure your entire paywall view without any code changes or app updates.

Learn more here

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.