Skip to content

Commit 0368d8b

Browse files
authored
Update @UserDefaultOverride optional type initializers to support a default value (#10)
1 parent 21b6275 commit 0368d8b

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

Sources/SwiftUserDefaults/UserDefaultOverride.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,10 @@ public struct UserDefaultOverride<Value>: UserDefaultOverrideRepresentable {
142142
}
143143

144144
public init<T: UserDefaultsStorable>(
145+
wrappedValue defaultValue: Value = nil,
145146
_ key: UserDefaults.Key
146147
) where Value == T? {
147-
self.init(wrappedValue: nil, key: key, transform: { $0 })
148+
self.init(wrappedValue: defaultValue, key: key, transform: { $0 })
148149
}
149150

150151
public init(
@@ -155,9 +156,10 @@ public struct UserDefaultOverride<Value>: UserDefaultOverrideRepresentable {
155156
}
156157

157158
public init<T: RawRepresentable>(
159+
wrappedValue defaultValue: Value = nil,
158160
_ key: UserDefaults.Key
159161
) where Value == T?, T.RawValue: UserDefaultsStorable {
160-
self.init(wrappedValue: nil, key: key, transform: { $0?.rawValue })
162+
self.init(wrappedValue: defaultValue, key: key, transform: { $0?.rawValue })
161163
}
162164

163165
public init(
@@ -169,9 +171,10 @@ public struct UserDefaultOverride<Value>: UserDefaultOverrideRepresentable {
169171
}
170172

171173
public init<T: Encodable>(
174+
wrappedValue defaultValue: Value = nil,
172175
_ key: UserDefaults.Key,
173176
strategy: UserDefaults.CodingStrategy
174177
) where Value == T? {
175-
self.init(wrappedValue: nil, key: key, transform: { try $0.flatMap({ try strategy.encode($0) }) })
178+
self.init(wrappedValue: defaultValue, key: key, transform: { try $0.flatMap({ try strategy.encode($0) }) })
176179
}
177180
}

Tests/SwiftUserDefaultsTests/LaunchArgumentEncodableTests.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ private struct AppConfiguration: LaunchArgumentEncodable {
4848

4949
// Optional UserDefaultsStorable
5050
@UserDefaultOverride(.isLegacyUser)
51-
var isLegacyUser: Bool?
51+
var isLegacyUser: Bool? = false
5252

5353
// Optional UserDefaultsStorable
5454
@UserDefaultOverride(.lastVisitDate)
@@ -82,7 +82,7 @@ class LaunchArgumentEncodableTests: XCTestCase {
8282
XCTAssertEqual(configuration.user, AppConfiguration.User(name: "John"))
8383
XCTAssertEqual(configuration.state, .registered)
8484
XCTAssertEqual(configuration.lastState, .unregistered)
85-
XCTAssertNil(configuration.isLegacyUser)
85+
XCTAssertEqual(configuration.isLegacyUser, false)
8686
XCTAssertEqual(configuration.lastVisitDate, Date(timeIntervalSinceReferenceDate: 60 * 60 * 24))
8787
XCTAssertEqual(configuration.windowPreferences.isMinimizeEnabled, false)
8888

@@ -91,6 +91,7 @@ class LaunchArgumentEncodableTests: XCTestCase {
9191
"-User", "<data>eyJuYW1lIjoiSm9obiJ9</data>",
9292
"-State", "<string>registered</string>",
9393
"-LastState", "<string>unregistered</string>",
94+
"-LegacyUser", "<false/>",
9495
"-LastVisitDate", "<date>2001-01-02T00:00:00Z</date>",
9596
"-WindowPreferences", "<data>eyJpc0Z1bGxTY3JlZW5TdXBwb3J0ZWQiOmZhbHNlLCJpc01pbmltaXplRW5hYmxlZCI6ZmFsc2V9</data>",
9697
"UI-Testing"

0 commit comments

Comments
 (0)