3

I am having trouble with the structure of my data for creating a List in SwiftUI. Before SwiftUI I created my data models and held this data in separated files. For example,

In my UserModel.swift :

import SwiftUI

struct UserModel: Equateable {

    var name: String
    var items = [ItemModel]()

    init(name: String, items: [ItemModel]? = nil) {
        self.name = name
        if let items = items {
            self.items = items
        }
    }
}

In my ItemModel.swift :

import SwiftUI

struct ItemModel: Equatable {
    var itemName: String
    var price: Double

    init(itemName: String, price: Double) {
        self.itemName = itemName
        self.price = price
    }
}

Then I had a separate class called Data that held this data.

In my Data.swift :

 import Foundation

class Data {
    static var userModels = [UserModel]()
    static var itemModels = [ItemModel]()
}

I would update the data by doing something like this in my views:

let user = UserModel(name: "Bob")
Data.userModels.append(user)

I'm having trouble populating a List from this framework in SwiftUI. I tried to make both of my model classes conform to Identifiable but that doesn't seem to help in updating the list. This is what I'm doing so far:

Updated UserModel :

struct UserModel: Identifiable {
    var id = UUID()

    var name: String
    var items = [ItemModel]()

    init(id: UUID, name: String, items: [ItemModel]? = nil) {
        self.id = id
        self.name = name
        if let items = items {
            self.items = items
        }
    }
}

Updated ItemModel:

struct ItemModel: Identifiable {
    var id = UUID()

    var itemName: String
    var price: Double

    init(id: UUID, itemName: String, price: Double) {
        self.id = id
        self.itemName = itemName
        self.price = price
    }
}

And in my ContentView.swift

List (Data.userModels) { user in
    Text("\(user.name)")

}

But this does not update the List when I am running the app. (Btw I take input from TextField, append it to Data.userModels, and try to populate it in the List with no luck.)

Is there a different way I should be structuring my data and data models? Or am I just not using the proper syntax when creating the list? Sorry for the long question. Thanks for the help!

1
  • 1
    You need to make your model class ObservableObject. Check this topic for example how this can be done. Commented Nov 18, 2019 at 5:39

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.