I’m trying to build my first Swift Data/Swift UI app and have hit a road block trying to load that data from a CSV file that is in my project. This is what I have right now and nothing will show on the view. Any ideas what is wrong?
View
import SwiftUI
import SwiftData
struct ForEachView: View {
@Environment(\.modelContext) private var modelContext
@Query private var shops: [Shop]
var body: some View {
NavigationView {
List {
ForEach(shops) { shop in
HStack {
Text(shop.name)
Text("1")
}
}
}.navigationTitle("Test")
}
}
}
#Preview {
ForEachView()
}
SHOP Model
import Foundation
import SwiftData
@Model
class Shop: Identifiable {
let id = UUID()
var name: String
var address: String
var instagram: String
var website: String
var phone: String
var local: Bool
var chain: Bool
var roaster: String
init(name: String, address: String, instagram: String, website: String, phone: String, local: Bool, chain: Bool, roaster: String) {
self.name = name
self.address = address
self.instagram = instagram
self.website = website
self.phone = phone
self.local = local
self.chain = chain
self.roaster = roaster
}
}
var shops = [Shop]()
func getShops() {
let url = Bundle.main.url(forResource: "CoffeeShops", withExtension: ".csv")
if let url {
do {
let data = try String(contentsOf: url)
let allRecords = Array(data.components(separatedBy: "\n"))
let records = Array(allRecords.dropFirst())
for record in records {
let columns = Array(record.components(separatedBy: ","))
let newShop = Shop(name: columns[0],
address: columns[1],
instagram: columns[2],
website: columns[3],
phone: columns[4],
local: Bool(columns[5]) ?? false,
chain: Bool(columns[6]) ?? false,
roaster: columns[7])
shops.append(newShop)
}
print(shops)
} catch {
print(error.localizedDescription)
}
}
}