Skip to content

Commit 4f28c33

Browse files
committed
Fix nil writing for optional RawRepresentable types
1 parent e0b72e6 commit 4f28c33

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

Diff for: SwiftUIShim-Tests/SceneStorageTests.swift

+3-4
Original file line numberDiff line numberDiff line change
@@ -459,10 +459,9 @@ class SceneStorageTests: XCTestCase {
459459
XCTAssertEqual(value.wrappedValue, newValue, "if set, the new value should be returned.")
460460
XCTAssertEqual(store.value(forKey: key) as? MyIntEnum.RawValue, newValue.rawValue, "the new value should be persisted session store")
461461

462-
// FIXME: this is currently failing
463-
// value.wrappedValue = nil
464-
// XCTAssertEqual(value.wrappedValue, nil, "if set to nil, the value should be cleared.")
465-
// XCTAssertEqual(store.value(forKey: key) as? MyIntEnum.RawValue, nil, "the nil value should be persisted session store")
462+
value.wrappedValue = nil
463+
XCTAssertEqual(value.wrappedValue, nil, "if set to nil, the value should be cleared.")
464+
XCTAssertEqual(store.value(forKey: key) as? MyIntEnum.RawValue, nil, "the nil value should be persisted session store")
466465

467466
store.set(externallySetValue.rawValue, forKey: key)
468467
XCTAssertEqual(value.wrappedValue, externallySetValue,

Diff for: SwiftUIShim/SceneStorage.swift

+5-2
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,11 @@ where T: RawRepresentable, T.RawValue: PropertyListTransform {
4646
}
4747

4848
public static func writeValue(_ value: Any?, to store: inout [AnyHashable: Any], key: String) {
49-
guard let value = value as? T? else { return }
50-
store[key] = value?.rawValue
49+
if value != nil, let value = value as? T? {
50+
store[key] = value?.rawValue
51+
} else {
52+
store[key] = nil
53+
}
5154
}
5255
}
5356

0 commit comments

Comments
 (0)