Skip to content

Structure

CodableConfiguration

iOS 15.0+ iPadOS 15.0+ Mac Catalyst 15.0+ macOS 12.0+ tvOS 15.0+ watchOS 8.0+
A property wrapper that makes a type codable, by supplying a configuration that provides additional information for serialization.
@propertyWrapper struct CodableConfiguration<T, ConfigurationProvider> where T : DecodableWithConfiguration, T : EncodableWithConfiguration, ConfigurationProvider : DecodingConfigurationProviding, ConfigurationProvider : EncodingConfigurationProviding, T.DecodingConfiguration == ConfigurationProvider.DecodingConfiguration, T.EncodingConfiguration == ConfigurationProvider.EncodingConfiguration

Overview

CodableConfiguration allows you to create doc://com.apple.documentation/documentation/swift/codable types whose members don’t all conform to doc://com.apple.documentation/documentation/swift/codable. For types that can’t support encoding and decoding by themselves but could become encodable and decodable with some statically-defined information, use the @CodableConfiguration wrapper. This lets you assign a configuration provider — a type that conforms to both EncodingConfigurationProviding and DecodingConfigurationProviding — to supply this data.

Limiting the CodableConfiguration to statically-defined information protects clients from loading unexpected data, similar to the protection provided by NSSecureCoding.

In the following example, the Message type uses @CodableConfiguration for an AttributedString property called content. While AttributedString does conform to doc://com.apple.documentation/documentation/swift/codable, it can only encode its known attributes — those declared by the platform SDK — as part of this conformance. By adding a CodableConfiguration for the custom MyAttributes type, Message uses encode(to:configuration:) when encoding content, which preserves the custom attributes.

struct Message: Codable {
let date: Date
let sender: Person
@CodableConfiguration(from: MyAttributes.self) var content = AttributedString()
}

Topics

Initializers

Instance Properties

  • var wrappedValue: T
    The underlying value to make codable, using data from the configuration provider.

Instance Methods

Relationships

Conforms To

  • Swift.Decodable
  • Swift.Encodable
  • Swift.Equatable
  • Swift.Hashable
  • Swift.Sendable
  • Swift.SendableMetatype