Hallo zusammen,
Ich bin neu im Forum und eben so neu (Anfänger) in SwiftUI. Ich möchte eine Rezepte-App erstellen und habe nun folgendes programmiert.
Programmcode für den DataManager:
import Foundation
class DataManager {
func fetchData(completion: @escaping ([Rezepte]) -> Void) {
guard let url = Bundle.main.url(forResource: "MeineRezepte", withExtension: "json") else {
print("Keine JSAN-Datei gefunden.")
completion([])
return
}
URLSession.shared.dataTask(with: url) { rezepte, _, error in
if let error = error {
print("Konnte Daten nicht übertragen: \(error.localizedDescription)")
completion([])
return
}
guard let jsonData = rezepte else {
print("Keine Daten gefunden.")
completion([])
return
}
do {
_ = try JSONDecoder().decode([Rezepte].self, from: jsonData)
} catch let DecodingError.dataCorrupted(context) {
print(context)
} catch let DecodingError.keyNotFound(key, context) {
print("Schlüssel '\(key)' nicht gefunden:", context.debugDescription)
print("kodierter Pfad:", context.codingPath)
} catch let DecodingError.valueNotFound(value, context) {
print("Wert '\(value)' nicht gefunden:", context.debugDescription)
print("kodierter Pfad:", context.codingPath)
} catch let DecodingError.typeMismatch(type, context) {
print("Typ '\(type)' stimmt nicht:", context.debugDescription)
print("kodierter Pfad:", context.codingPath)
} catch {
print("Fehler: ", error)
}
}
.resume()
}
}
Programmcode für die ContentView:
import SwiftUI
struct Rezepte: Codable, Identifiable{
var id: Int
let Seite: String
let Buch: String
let Rezept: String
let Kategorie: String
}
struct ContentView: View {
@State private var rezepte = [Rezepte]()
private let dataManager = DataManager()
var body: some View {
NavigationView {
ScrollView {
VStack {
List(rezepte, id: \.id) { item in
ForEach(rezepte) { rezept in
HStack {
Text(String(rezept.id))
Text(rezept.Seite)
Text(rezept.Buch)
Text(rezept.Rezept)
Text(rezept.Kategorie)
}
}
}
.onAppear {
dataManager.fetchData { fetchedData in
rezepte = fetchedData
}
}
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
#Preview {
ContentView()
}
Leider erscheint im Simulator keine Anzeige der Daten. Wer kann mir behilflich sein?
Liebe Grüsse
Marios
Ich bin neu im Forum und eben so neu (Anfänger) in SwiftUI. Ich möchte eine Rezepte-App erstellen und habe nun folgendes programmiert.
Programmcode für den DataManager:
import Foundation
class DataManager {
func fetchData(completion: @escaping ([Rezepte]) -> Void) {
guard let url = Bundle.main.url(forResource: "MeineRezepte", withExtension: "json") else {
print("Keine JSAN-Datei gefunden.")
completion([])
return
}
URLSession.shared.dataTask(with: url) { rezepte, _, error in
if let error = error {
print("Konnte Daten nicht übertragen: \(error.localizedDescription)")
completion([])
return
}
guard let jsonData = rezepte else {
print("Keine Daten gefunden.")
completion([])
return
}
do {
_ = try JSONDecoder().decode([Rezepte].self, from: jsonData)
} catch let DecodingError.dataCorrupted(context) {
print(context)
} catch let DecodingError.keyNotFound(key, context) {
print("Schlüssel '\(key)' nicht gefunden:", context.debugDescription)
print("kodierter Pfad:", context.codingPath)
} catch let DecodingError.valueNotFound(value, context) {
print("Wert '\(value)' nicht gefunden:", context.debugDescription)
print("kodierter Pfad:", context.codingPath)
} catch let DecodingError.typeMismatch(type, context) {
print("Typ '\(type)' stimmt nicht:", context.debugDescription)
print("kodierter Pfad:", context.codingPath)
} catch {
print("Fehler: ", error)
}
}
.resume()
}
}
Programmcode für die ContentView:
import SwiftUI
struct Rezepte: Codable, Identifiable{
var id: Int
let Seite: String
let Buch: String
let Rezept: String
let Kategorie: String
}
struct ContentView: View {
@State private var rezepte = [Rezepte]()
private let dataManager = DataManager()
var body: some View {
NavigationView {
ScrollView {
VStack {
List(rezepte, id: \.id) { item in
ForEach(rezepte) { rezept in
HStack {
Text(String(rezept.id))
Text(rezept.Seite)
Text(rezept.Buch)
Text(rezept.Rezept)
Text(rezept.Kategorie)
}
}
}
.onAppear {
dataManager.fetchData { fetchedData in
rezepte = fetchedData
}
}
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
#Preview {
ContentView()
}
Leider erscheint im Simulator keine Anzeige der Daten. Wer kann mir behilflich sein?
Liebe Grüsse
Marios