From 143a8a1d0cabc2f293f1b4b8325138b39d7bb74d Mon Sep 17 00:00:00 2001 From: Liam Nichols Date: Fri, 14 Jan 2022 18:44:24 +0100 Subject: [PATCH] Update @UserDefaultOverride optional type initializers to support a default value --- Sources/SwiftUserDefaults/UserDefaultOverride.swift | 9 ++++++--- .../LaunchArgumentEncodableTests.swift | 5 +++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Sources/SwiftUserDefaults/UserDefaultOverride.swift b/Sources/SwiftUserDefaults/UserDefaultOverride.swift index 8097d19..7ee8532 100644 --- a/Sources/SwiftUserDefaults/UserDefaultOverride.swift +++ b/Sources/SwiftUserDefaults/UserDefaultOverride.swift @@ -142,9 +142,10 @@ public struct UserDefaultOverride: UserDefaultOverrideRepresentable { } public init( + wrappedValue defaultValue: Value = nil, _ key: UserDefaults.Key ) where Value == T? { - self.init(wrappedValue: nil, key: key, transform: { $0 }) + self.init(wrappedValue: defaultValue, key: key, transform: { $0 }) } public init( @@ -155,9 +156,10 @@ public struct UserDefaultOverride: UserDefaultOverrideRepresentable { } public init( + wrappedValue defaultValue: Value = nil, _ key: UserDefaults.Key ) where Value == T?, T.RawValue: UserDefaultsStorable { - self.init(wrappedValue: nil, key: key, transform: { $0?.rawValue }) + self.init(wrappedValue: defaultValue, key: key, transform: { $0?.rawValue }) } public init( @@ -169,9 +171,10 @@ public struct UserDefaultOverride: UserDefaultOverrideRepresentable { } public init( + wrappedValue defaultValue: Value = nil, _ key: UserDefaults.Key, strategy: UserDefaults.CodingStrategy ) where Value == T? { - self.init(wrappedValue: nil, key: key, transform: { try $0.flatMap({ try strategy.encode($0) }) }) + self.init(wrappedValue: defaultValue, key: key, transform: { try $0.flatMap({ try strategy.encode($0) }) }) } } diff --git a/Tests/SwiftUserDefaultsTests/LaunchArgumentEncodableTests.swift b/Tests/SwiftUserDefaultsTests/LaunchArgumentEncodableTests.swift index 53a563a..2a14d7b 100644 --- a/Tests/SwiftUserDefaultsTests/LaunchArgumentEncodableTests.swift +++ b/Tests/SwiftUserDefaultsTests/LaunchArgumentEncodableTests.swift @@ -48,7 +48,7 @@ private struct AppConfiguration: LaunchArgumentEncodable { // Optional UserDefaultsStorable @UserDefaultOverride(.isLegacyUser) - var isLegacyUser: Bool? + var isLegacyUser: Bool? = false // Optional UserDefaultsStorable @UserDefaultOverride(.lastVisitDate) @@ -82,7 +82,7 @@ class LaunchArgumentEncodableTests: XCTestCase { XCTAssertEqual(configuration.user, AppConfiguration.User(name: "John")) XCTAssertEqual(configuration.state, .registered) XCTAssertEqual(configuration.lastState, .unregistered) - XCTAssertNil(configuration.isLegacyUser) + XCTAssertEqual(configuration.isLegacyUser, false) XCTAssertEqual(configuration.lastVisitDate, Date(timeIntervalSinceReferenceDate: 60 * 60 * 24)) XCTAssertEqual(configuration.windowPreferences.isMinimizeEnabled, false) @@ -91,6 +91,7 @@ class LaunchArgumentEncodableTests: XCTestCase { "-User", "eyJuYW1lIjoiSm9obiJ9", "-State", "registered", "-LastState", "unregistered", + "-LegacyUser", "", "-LastVisitDate", "2001-01-02T00:00:00Z", "-WindowPreferences", "eyJpc0Z1bGxTY3JlZW5TdXBwb3J0ZWQiOmZhbHNlLCJpc01pbmltaXplRW5hYmxlZCI6ZmFsc2V9", "UI-Testing"