48 lines
1.2 KiB
Swift
48 lines
1.2 KiB
Swift
|
|
import Foundation
|
|
|
|
|
|
protocol Vehicle {
|
|
var name: String { get }
|
|
var color: String { get set }
|
|
}
|
|
struct Train: Vehicle, CustomStringConvertible , CustomLocalizedStringResourceConvertible {
|
|
var name: String
|
|
var color: String
|
|
var delay: Int
|
|
var content: Bike
|
|
var description: String { "Zug \(name) mit \(content) hat \(delay) Minuten Verspätung" }
|
|
var localizedStringResource: LocalizedStringResource {
|
|
"Train \(name) with \(content) has ^[\(delay) minute](inflect: true) delay."
|
|
}
|
|
|
|
// init(describing obj: CustomLocalizedStringResourceConvertible){
|
|
// self.init(describing: obj.localizedStringResource)
|
|
// }
|
|
|
|
init(
|
|
name: String = "ICE",
|
|
color: String = "white",
|
|
delay: Int = 0,
|
|
@BikeBuilder content: @escaping () -> Bike
|
|
) {
|
|
self.name = name
|
|
self.color = color
|
|
self.delay = delay
|
|
self.content = content()
|
|
}
|
|
}
|
|
|
|
struct Bike: Vehicle, CustomStringConvertible {
|
|
var name: String
|
|
var color: String
|
|
var description: String { name + " is " + color }
|
|
|
|
var price: some Equatable {
|
|
"FREE"
|
|
}
|
|
static let trek = Bike(name: "Trek", color: "green")
|
|
func emptyBasket() {
|
|
print("emptied", Date())
|
|
}
|
|
}
|