Skip to content

Commit 9de16b3

Browse files
authored
Fix @shared initializer with default nil. (pointfreeco#3035)
* Fix @shared initializer with default nil. * wip
1 parent 57cfcb6 commit 9de16b3

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

Sources/ComposableArchitecture/SharedState/PersistenceKey/AppStorageKey.swift

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -282,9 +282,7 @@ extension AppStorageKey: PersistenceKey {
282282
}
283283

284284
public func save(_ value: Value) {
285-
SharedAppStorageLocals.$isSetting.withValue(true) {
286-
self.lookup.saveValue(value, to: self.store, at: self.key)
287-
}
285+
self.lookup.saveValue(value, to: self.store, at: self.key)
288286
}
289287

290288
public func subscribe(
@@ -373,13 +371,18 @@ private struct CastableLookup<Value>: Lookup {
373371
) -> Value? {
374372
guard let value = store.object(forKey: key) as? Value
375373
else {
376-
store.setValue(defaultValue, forKey: key)
374+
SharedAppStorageLocals.$isSetting.withValue(true) {
375+
store.setValue(defaultValue, forKey: key)
376+
}
377377
return defaultValue
378378
}
379379
return value
380380
}
381+
381382
func saveValue(_ newValue: Value, to store: UserDefaults, at key: String) {
382-
store.setValue(newValue, forKey: key)
383+
SharedAppStorageLocals.$isSetting.withValue(true) {
384+
store.setValue(newValue, forKey: key)
385+
}
383386
}
384387
}
385388

Tests/ComposableArchitectureTests/AppStorageTests.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,13 @@ final class AppStorageTests: XCTestCase {
142142
defaults.count += 1
143143
XCTAssertEqual(count, 1)
144144
}
145+
146+
func testOptionalInitializers() {
147+
@Shared(.appStorage("count1")) var count1: Int?
148+
XCTAssertEqual(count1, nil)
149+
@Shared(.appStorage("count")) var count2: Int? = nil
150+
XCTAssertEqual(count2, nil)
151+
}
145152
}
146153

147154
extension UserDefaults {

0 commit comments

Comments
 (0)