Creating Custom Format Styles
Visit the “Build a Format Style Workshop”.
As a protocol, FormatStyle
is quite simple to conform to:
/// A type that can convert a given data type into a representation
@available(macOS 12.0, iOS 15.0, tvOS 15.0, watchOS 8.0, *)
public protocol FormatStyle : Decodable, Encodable, Hashable {
/// The type of data to format.
associatedtype FormatInput
/// The type of the formatted data.
associatedtype FormatOutput
/// Creates a `FormatOutput` instance from `value`.
func format(_ value: Self.FormatInput) -> Self.FormatOutput
/// If the format allows selecting a locale, returns a copy of this format with the new locale set. Default implementation returns an unmodified self.
func locale(_ locale: Locale) -> Self
}
Essentially, this provides you with the ability to convert any data type into any other data type or representation.
Here’s an example of a custom type (an ISBN) that supports FormatStyle
, ParseableFormatStyle
, and can output AttributedString
values.