I’m working on a project using mealDB, and this is my first time working with a json DB and none of the data is populating in my app. I have a function:
func fetchDesserts() async throws -> [Meal] {
let urlString = "https://themealdb.com/api/json/v1/1/filter.php?c=Dessert"
guard let url = URL(string: urlString) else {
throw URLError(.badURL)
}
let (data, _) = try await URLSession.shared.data(from: url)
let mealResponse = try JSONDecoder().decode(MealResponse.self, from: data)
var meals: [Meal] = []
for mealData in mealResponse.meals {
guard let imageUrl = URL(string: mealData.strMealThumb) else {
continue
}
let (imageData, _) = try await URLSession.shared.data(from: imageUrl)
if let image = UIImage(data: imageData) {
let meal = Meal(name: mealData.strMeal, image: image, id: Int(mealData.idMeal) ?? 0)
meals.append(meal)
}
}
return meals
}
That I call here:
struct ContentView: View {
@StateObject var model = MealViewModel()
var body: some View {
NavigationStack {
VStack {
// Dessert Button
NavigationLink(destination: {
DessertView(desserts: model.desserts)
.onAppear(perform: {
Task {
do {
model.desserts = try await fetchDesserts()
} catch {
print(error)
}
}
})
}, label: {
ZStack {
RoundedRectangle(cornerRadius: 25.0)
.frame(width: 200, height: 100)
Text("Desserts")
.foregroundStyle(.white)
}
})
}
.padding()
}
}
}
I don’t know if I improperly structured my query or am calling it incorrectly. On the mealDB website they state to use the API key “1” for development but I don’t know where I would specify the API key. If someone can provide some feedback it would be much appreciated.