import Foundation import SwiftUI protocol Vehicle { var name: String { get } var color: Color { get set } } protocol TabContent { init() //title: String, image: String) // <#statements#> // } static var title: String { get } static var image: String { get } } struct Train: 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() } } struct Bike: Vehicle, CustomStringConvertible { var name: String var price: Double var color: Color // 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()) } }