From aa88c99f15baa855f5c8b86a8ed6cbfc2740a78f Mon Sep 17 00:00:00 2001 From: Brandon Williams Date: Tue, 30 Apr 2024 09:57:14 -0700 Subject: [PATCH 1/2] Fix @Shared initializer with default nil. --- .../SharedState/PersistenceKey/AppStorageKey.swift | 13 ++++++++----- .../AppStorageTests.swift | 7 +++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Sources/ComposableArchitecture/SharedState/PersistenceKey/AppStorageKey.swift b/Sources/ComposableArchitecture/SharedState/PersistenceKey/AppStorageKey.swift index 498a67793110..52e59ea1947f 100644 --- a/Sources/ComposableArchitecture/SharedState/PersistenceKey/AppStorageKey.swift +++ b/Sources/ComposableArchitecture/SharedState/PersistenceKey/AppStorageKey.swift @@ -282,9 +282,7 @@ extension AppStorageKey: PersistenceKey { } public func save(_ value: Value) { - SharedAppStorageLocals.$isSetting.withValue(true) { - self.lookup.saveValue(value, to: self.store, at: self.key) - } + self.lookup.saveValue(value, to: self.store, at: self.key) } public func subscribe( @@ -373,13 +371,18 @@ private struct CastableLookup: Lookup { ) -> Value? { guard let value = store.object(forKey: key) as? Value else { - store.setValue(defaultValue, forKey: key) + SharedAppStorageLocals.$isSetting.withValue(true) { + store.setValue(defaultValue, forKey: key) + } return defaultValue } return value } + func saveValue(_ newValue: Value, to store: UserDefaults, at key: String) { - store.setValue(newValue, forKey: key) + SharedAppStorageLocals.$isSetting.withValue(true) { + store.setValue(newValue, forKey: key) + } } } diff --git a/Tests/ComposableArchitectureTests/AppStorageTests.swift b/Tests/ComposableArchitectureTests/AppStorageTests.swift index 039bcdb19735..bdf3ea0c0953 100644 --- a/Tests/ComposableArchitectureTests/AppStorageTests.swift +++ b/Tests/ComposableArchitectureTests/AppStorageTests.swift @@ -142,6 +142,13 @@ final class AppStorageTests: XCTestCase { defaults.count += 1 XCTAssertEqual(count, 1) } + + func testOptional() { + @Shared(.appStorage("count1")) var count1: Int? + XCTAssertEqual(count1, nil) + @Shared(.appStorage("count")) var count2: Int? = nil + XCTAssertEqual(count2, nil) + } } extension UserDefaults { From 5bb32ecd0d31098291ffd0be671dd2ca440a84d5 Mon Sep 17 00:00:00 2001 From: Brandon Williams Date: Tue, 30 Apr 2024 10:02:29 -0700 Subject: [PATCH 2/2] wip --- Tests/ComposableArchitectureTests/AppStorageTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/ComposableArchitectureTests/AppStorageTests.swift b/Tests/ComposableArchitectureTests/AppStorageTests.swift index bdf3ea0c0953..dbe5a1417c42 100644 --- a/Tests/ComposableArchitectureTests/AppStorageTests.swift +++ b/Tests/ComposableArchitectureTests/AppStorageTests.swift @@ -143,7 +143,7 @@ final class AppStorageTests: XCTestCase { XCTAssertEqual(count, 1) } - func testOptional() { + func testOptionalInitializers() { @Shared(.appStorage("count1")) var count1: Int? XCTAssertEqual(count1, nil) @Shared(.appStorage("count")) var count2: Int? = nil