70 lines
1.8 KiB
Swift
70 lines
1.8 KiB
Swift
//
|
|
// DataView.swift
|
|
// TheSwiftWeek
|
|
//
|
|
// Created by Ingo Rohlf on 24.10.25.
|
|
//
|
|
|
|
import SwiftUI
|
|
import Foundation
|
|
|
|
struct MenuCard: Codable {
|
|
let items: [MenuItem]
|
|
}
|
|
|
|
struct MenuItem: Codable {
|
|
let name: String
|
|
let description: String
|
|
let imageUrl: URL
|
|
// let price: Double
|
|
|
|
// enum CodingKeys: String, CodingKey {
|
|
// case name
|
|
// case detailText = "description"
|
|
// }
|
|
}
|
|
|
|
struct DataView: View {
|
|
let url2 = URL(string: "https://git.irohlf.de/api/swagger")!
|
|
private let url = URL(string: "http://127.0.0.1:8080/menu")!
|
|
private let jsonDecoder = JSONDecoder()
|
|
@State private var menu = MenuCard(items: [])
|
|
|
|
var body: some View {
|
|
Text(url.absoluteString)
|
|
.onAppear{
|
|
Task {
|
|
let (data, response) = try await
|
|
URLSession.shared.data(from: url)
|
|
|
|
guard let string = String(
|
|
data: data,
|
|
encoding: .utf8
|
|
) else { return }
|
|
|
|
if let response = response as? HTTPURLResponse, response.statusCode == 200 {
|
|
jsonDecoder.keyDecodingStrategy = .convertFromSnakeCase
|
|
|
|
menu = try! jsonDecoder.decode(MenuCard.self, from: data)
|
|
|
|
|
|
}
|
|
|
|
print("fertig geladen")
|
|
print(string)
|
|
}
|
|
}
|
|
|
|
ForEach(menu.items, id: \.name) { item in
|
|
HStack {
|
|
AsyncImage(url: item.imageUrl, scale: 12)
|
|
// Text(item.imageUrl.absoluteString )
|
|
Text(item.description )
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
DataView()
|
|
}
|