diff --git a/Sources/Defaults/Utilities.swift b/Sources/Defaults/Utilities.swift index aaaee5e..357e0c6 100644 --- a/Sources/Defaults/Utilities.swift +++ b/Sources/Defaults/Utilities.swift @@ -194,7 +194,7 @@ extension Defaults.Serializable { return anyObject } - guard let nextType = T.Serializable.self as? any Defaults.Serializable.Type else { + guard let nextType = T.Serializable.self as? any Defaults.Serializable.Type, nextType != T.self else { // This is a special case for the types which do not conform to `Defaults.Serializable` (for example, `Any`). return T.bridge.deserialize(anyObject as? T.Serializable) as? T } diff --git a/Tests/DefaultsTests/DefaultsAnySeriliazableTests.swift b/Tests/DefaultsTests/DefaultsAnySeriliazableTests.swift index b0f4017..a0f9e61 100644 --- a/Tests/DefaultsTests/DefaultsAnySeriliazableTests.swift +++ b/Tests/DefaultsTests/DefaultsAnySeriliazableTests.swift @@ -466,4 +466,10 @@ final class DefaultsAnySerializableTests: XCTestCase { waitForExpectations(timeout: 10) } + + func testWrongCast() { + let value = Defaults.AnySerializable(false) + XCTAssertEqual(value.get(Bool.self), false) + XCTAssertNil(value.get(String.self)) + } }