Represents a string literal with interpolations while it is being built up.

    @frozen struct DefaultStringInterpolation

    Do not create an instance of this type directly. It is used by the compiler when you create a string using string interpolation. Instead, use string interpolation to create a new string by including values, literals, variables, or expressions enclosed in parentheses, prefixed by a backslash (\()).

    let price = 2
    let number = 3
    let message = """
                  If one cookie costs \(price) dollars, \
                  \(number) cookies cost \(price * number) dollars.
    // Prints "If one cookie costs 2 dollars, 3 cookies cost 6 dollars."

    When implementing an ExpressibleByStringInterpolation conformance, set the StringInterpolation associated type to DefaultStringInterpolation to get the same interpolation behavior as Swift’s built-in String type and construct a String with the results. If you don’t want the default behavior or don’t want to construct a String, use a custom type conforming to StringInterpolationProtocol instead.

    Extending default string interpolation behavior

    Code outside the standard library can extend string interpolation on String and many other common types by extending DefaultStringInterpolation and adding an appendInterpolation(...) method. For example:

    extension DefaultStringInterpolation {
        fileprivate mutating func appendInterpolation(
                 escaped value: String, asASCII forceASCII: Bool = false) {
            for char in value.unicodeScalars {
                appendInterpolation(char.escaped(asASCII: forceASCII))
    print("Escaped string: \(escaped: string)")

    See StringInterpolationProtocol for details on appendInterpolation methods.

    DefaultStringInterpolation extensions should add only mutating members and should not copy self or capture it in an escaping closure.

    Citizens in Swift