A type conforming to ExpressibleByStringInterpolation
uses a helper type called StringInterpolation
to perform its interpolation. Many types can use DefaultStringInterpolation
, which implements String
's interpolation behavior. Types can also implement custom behavior by providing their own type conforming to StringInterpolationProtocol
.
In addition to its formal requirements, init(literalCapacity:interpolationCount:)
and appendLiteral(_:)
, StringInterpolationProtocol
has an additional, informal requirement, appendInterpolation
. String interpolations using \()
syntax are translated into calls to matching appendInterpolation
methods.
StringInterpolationProtocol
conformers must provide at least one appendInterpolation
method which:
- Is an instance method, as opposed to a
static
orclass
method - Does not specify a return type, explicitly returns
Void
, or is marked with the@discardableResult
attribute - Is at least as accessible as its containing type
There are no restrictions on an appendInterpolation
method's argument list, generic parameters, availability, or error-throwing behavior.
If appendInterpolation
is overloaded, the Swift compiler will choose an appropriate overload using the labels and argument types of each interpolation. When choosing an overload, any accessible appendInterpolation
instance method may be used, even if it does not meet all of the requirements above. However, if a StringInterpolationProtocol
conformer doesn't have any appendInterpolation
methods which meet all of the requirements, an error will be reported at compile time.
To learn more about customizing string interpolation behavior, see the standard library documentation of the ExpressibleByStringInterpolation
and StringInterpolationProtocol
protocols.