Schulung_iOS/Models.swift
2025-10-23 13:45:41 +02:00

82 lines
2 KiB
Swift

import Foundation
import SwiftUI
protocol Vehicle: Identifiable {
var name: String { get }
var color: Color { get set }
}
extension Vehicle {
var id: UUID {UUID()}
}
//protocol TabContent: View {
protocol TabContent: View {
init()
static var title: String { get }
static var image: String { get }
}
extension TabContent {
var id: UUID {UUID()}
}
struct Train: @MainActor Vehicle, CustomStringConvertible , CustomLocalizedStringResourceConvertible {
var name: String
var color: Color
var delay: Int
var content: Bike
var description: String { "Zug \(name) hat \(delay) Minuten Verspätung" }
var localizedStringResource: LocalizedStringResource {
"Train \(name) has ^[\(delay) minute](inflect: true) delay."
}
// init(describing obj: CustomLocalizedStringResourceConvertible){
// self.init(describing: obj.localizedStringResource)
// }
init(
name: String = "ICE",
color: Color = .red,
delay: Int = 0,
@BikeBuilder content: @escaping () -> Bike
) {
self.name = name
self.color = Color.yellow
self.delay = delay
self.content = content()
}
}
enum BikeType: String, Codable, CaseIterable, Identifiable {
var id: String { rawValue }
case unknown
case mountain
case city
case gravel
}
struct Bike: @MainActor Vehicle, CustomStringConvertible {
var name: String
var price: Double = Double(Int.random(in: 3...8)*50) - 0.51
var color: Color
var type: BikeType = .unknown
// var description: String { name + " is " + color }
var description: String {"\(name) is \(color)" }
static let trek = Bike(name: "Trek", price: 12.98,color: .red )
func emptyBasket() {
print("emptied", Date())
}
static var all: [Bike] = [
Bike(name: "Specialized",price: 149.98, color: .purple ),
Bike(name: "Giant",price: 129.00, color: .red ),
Bike(name: "Cannondale",price: 299.00, color: .green )
]
}