Hallo zusammen,
gemäß dem Motto "Schreib Deinen Code nur einmal" würde ich gerne folgende Klasse erstellen:
Alles anzeigen
Mein Problem ist die Property parent die momentan als Optional Configuration definiert ist.
Eigentlich muss Configuration generisch sein, da je nach dem wo die Klasse Delay verwendet wird, müssen unterschiedliche UserDefaults gespeichert werden.
Das einzige was mir einfällt ist die Klasse Delay abzuleiten in PrivacyDelay und AccessProtectionDelay (Privacy und AccessProtection sind die beiden Klassen die anstatt Configuration verwendet werden müssten).
In Delay wurde ich dann eine leere Funktion setUserDefault erstellen, die ich in den beiden Ableitungen überschreiben müsste.
Insgesamt brauche diese Klasse aktuell 5x. Rentiert sich dann der Aufwand überhaupt?
Fällt Euch noch etwas besseres ein?
gemäß dem Motto "Schreib Deinen Code nur einmal" würde ich gerne folgende Klasse erstellen:
Quellcode
- class Delay : Codable, Equatable {
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- // S T A T I C C O N S T A N T S
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- /// The value that represents that the delay is deactivated.
- static let none : Int = 1977
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- /// The lower limit for the delay.
- static let min : Int = 0
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- /// The upper limit for the delay.
- static let max : Int = 300
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- // I N S T A N C E P R O P E R T I E S
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- /// The parent to wiche the depay belongs.
- unowned var parent : Configuration?
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- /// The number of seconds for the delay.
- @Published var value : Int {
- didSet {
- if(self.value != Delay.none) {
- if(self.value < Delay.min) {
- self.value = Delay.min
- } else if(self.value > Delay.max) {
- self.value = Delay.max
- }
- }
- if let _configuration = self.parent {
- _configuration.setUserDefaults()
- }
- }
- }
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- // I N I T I L I Z E R
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- /// Creates a new instance from Swift objects.
- ///
- /// - Parameter value: The time in seconds for the delay.
- init(_ _value : Int) {
- if(_value != Delay.none) {
- self.value = Swift.min(Swift.max(_value, Delay.min), Delay.max)
- } else {
- self.value = Delay.none
- }
- }
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- // C O D A B L E
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- convenience required init(from _decoder: Decoder) {
- try! self.init(_decoder.singleValueContainer().decode(Int.self))
- }
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- func encode(to _encoder : Encoder) {
- var _container : SingleValueEncodingContainer = _encoder.singleValueContainer()
- try! _container.encode(self.value)
- }
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- // E Q U A T A B L E
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- static func == (_lhs : Delay, _rhs : Delay) -> Bool {
- return(_lhs.value == _rhs.value)
- }
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- static func != (_lhs : Delay, _rhs : Delay) -> Bool {
- return !(_lhs == _rhs)
- }
- }
- // ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- // END OF FILE
Eigentlich muss Configuration generisch sein, da je nach dem wo die Klasse Delay verwendet wird, müssen unterschiedliche UserDefaults gespeichert werden.
Das einzige was mir einfällt ist die Klasse Delay abzuleiten in PrivacyDelay und AccessProtectionDelay (Privacy und AccessProtection sind die beiden Klassen die anstatt Configuration verwendet werden müssten).
In Delay wurde ich dann eine leere Funktion setUserDefault erstellen, die ich in den beiden Ableitungen überschreiben müsste.
Insgesamt brauche diese Klasse aktuell 5x. Rentiert sich dann der Aufwand überhaupt?
Fällt Euch noch etwas besseres ein?