import Foundation /// Warum gerade nichts übertragen wird, obwohl etwas in der Schlange steht. /// /// Die Hintergrund-Sitzung wartet in diesen Fällen von sich aus — sie meldet /// keinen Fehler, sie tut nur nichts. Für den Betrachter sieht das aus wie /// ein hängender Download: der Balken steht, und nichts sagt, worauf. public enum TransferHold: Sendable, Equatable { case none /// „Nur über WLAN" ist an, und das Gerät hängt am Mobilfunk. case waitingForWiFi /// Gar keine Verbindung. case offline /// Was die Übertragung gerade aufhält. /// /// `isExpensive` statt einer Abfrage auf den Schnittstellentyp: der Wert /// deckt auch den persönlichen Hotspot ab — technisch WLAN, in der /// Abrechnung Mobilfunk. Wer dort lädt, zahlt es trotzdem. public static func current( isWiFiOnly: Bool, isReachable: Bool, isExpensive: Bool ) -> TransferHold { // Ohne Verbindung hilft auch ein ausgeschalteter WLAN-Zwang nicht — // deshalb zuerst geprüft. if !isReachable { return .offline } if isWiFiOnly, isExpensive { return .waitingForWiFi } return .none } public var isHolding: Bool { self != .none } }