Ersetzt die zehn wählbaren Symbole durch eine kürzere, konsistentere Auswahl (car, car.side, suv.side, truck.pickup.side, box.truck, bus) und setzt suv.side als neuen Standard für neu angelegte Fahrzeuge. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
53 lines
2.0 KiB
Swift
53 lines
2.0 KiB
Swift
import Foundation
|
||
|
||
/// Ein Fahrzeug. Jedes Profil hat seinen eigenen Satz Geräte; die App zeigt und
|
||
/// funkt immer nur für das gerade gewählte.
|
||
struct Profile: Identifiable, Codable, Hashable, Sendable {
|
||
var id: UUID
|
||
var name: String
|
||
/// SF-Symbol für die Auswahl im Dashboard.
|
||
var symbol: String
|
||
|
||
/// Spurweite in Metern – für die Berechnung der Auffahrkeile quer.
|
||
var trackWidth: Double?
|
||
/// Radstand in Metern – dasselbe längs.
|
||
var wheelbase: Double?
|
||
|
||
init(id: UUID = UUID(),
|
||
name: String,
|
||
symbol: String = "suv.side",
|
||
trackWidth: Double? = nil,
|
||
wheelbase: Double? = nil) {
|
||
self.id = id
|
||
self.name = name
|
||
self.symbol = symbol
|
||
self.trackWidth = trackWidth
|
||
self.wheelbase = wheelbase
|
||
}
|
||
|
||
/// Profile aus der Zeit vor den Fahrzeugmassen haben noch keine.
|
||
init(from decoder: Decoder) throws {
|
||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||
id = try container.decode(UUID.self, forKey: .id)
|
||
name = try container.decode(String.self, forKey: .name)
|
||
symbol = try container.decode(String.self, forKey: .symbol)
|
||
trackWidth = try container.decodeIfPresent(Double.self, forKey: .trackWidth)
|
||
wheelbase = try container.decodeIfPresent(Double.self, forKey: .wheelbase)
|
||
}
|
||
|
||
/// Profil, dem Geräte aus der Zeit vor der Profilverwaltung zugeordnet
|
||
/// werden. Feste Kennung, damit die Zuordnung beim Update erhalten bleibt.
|
||
static let defaultID = UUID(uuidString: "00000000-0000-0000-0000-00000000C001")!
|
||
|
||
static var initial: Profile {
|
||
Profile(id: defaultID, name: "Mein Camper")
|
||
}
|
||
|
||
/// Auswahl für die Profilbearbeitung.
|
||
/// Alle Namen gegen NSImage(systemSymbolName:) geprüft – ein nicht
|
||
/// existierendes Symbol lässt SwiftUI stillschweigend auf Text zurückfallen.
|
||
static let symbols = [
|
||
"car", "car.side", "suv.side", "truck.pickup.side", "box.truck", "bus",
|
||
]
|
||
}
|