Protocol

StringInterpolationProtocol

Represents the contents of a string literal with interpolations while it’s being built up. いくらかの補間をもつある文字列リテラルの内容それらを、それが作り上げられている間に表します。

Declaration 宣言

protocol StringInterpolationProtocol

Overview 概要

Each ExpressibleByStringInterpolation type has an associated StringInterpolation type which conforms to StringInterpolationProtocol. Swift converts an expression like "The time is \(time)." as MyString into a series of statements similar to: それぞれのExpressibleByStringInterpolation型は、ある結び付けられたStringInterpolation型を持ちそれはStringInterpolationProtocolに準拠します。Swiftは、"The time is \(time)." as MyStringのような式を、次のような一連の文に変換します:


var interpolation = MyString.StringInterpolation(literalCapacity: 13, 
                                                 interpolationCount: 1)


interpolation.appendLiteral("The time is ")
interpolation.appendInterpolation(time)
interpolation.appendLiteral(".")


MyString(stringInterpolation: interpolation)

The StringInterpolation type is responsible for collecting the segments passed to its appendLiteral(_:) and appendInterpolation methods and assembling them into a whole, converting as necessary. Once all of the segments are appended, the interpolation is passed to an init(stringInterpolation:) initializer on the type being created, which must extract the accumulated data from the StringInterpolation. StringInterpolation型は、それのappendLiteral(_:)appendInterpolationメソッドに渡される文節を集めること、そしてそれらをある全体へと、必要に応じて変換して、組み立てることに責任があります。一旦すべての文節が追加されるならば、補間はその作成されている型上でのinit(stringInterpolation:)イニシャライザに渡されます、それは蓄積されたデータをStringInterpolationから抽出しなければなりません。

In simple cases, you can use DefaultStringInterpolation as the interpolation type for types that conform to the ExpressibleByStringLiteral protocol. To use the default interpolation, conform a type to ExpressibleByStringInterpolation and implement init(stringLiteral: String). Values in interpolations are converted to strings, and then passed to that initializer just like any other string literal. 単純な場合には、あなたはDefaultStringInterpolationを補間型としてExpressibleByStringLiteralプロトコルに準拠する型に対して使用できます。省略時の補間を使うには、型をExpressibleByStringInterpolationに準拠させて、そしてinit(stringLiteral: String)を実装してください。補間の中の値は文字列に変換されます、そしてそれからそのイニシャライザに渡されます、ちょうど何か他の文字列リテラルのように。

Handling String Interpolations 文字列補間を取り扱う

With a custom interpolation type, each interpolated segment is translated into a call to a special appendInterpolation method. The contents of the interpolation’s parentheses are treated as the call’s argument list. That argument list can include multiple arguments and argument labels. あるあつらえの補間型では、それぞれの補間される文節は特別なappendInterpolationメソッドへの呼び出しに翻訳されます。補間のもつ丸括弧の内容は、その呼び出しの引数リストとして扱われます。引数リストは、複数の引数そして引数ラベルを含むことができます。

The following examples show how string interpolations are translated into calls to appendInterpolation: 以下の例は、どのように文字列補間がappendInterpolationへの呼び出しに翻訳されるかを示します:

  • \(x) translates to appendInterpolation(x) \(x)appendInterpolation(x)に翻訳されます

  • \(x, y) translates to appendInterpolation(x, y) \(x, y)appendInterpolation(x, y)に翻訳されます

  • \(foo: x) translates to appendInterpolation(foo: x) \(foo: x)appendInterpolation(foo: x)に翻訳されます

  • \(x, foo: y) translates to appendInterpolation(x, foo: y) \(x, foo: y)appendInterpolation(x, foo: y)に翻訳されます

The appendInterpolation methods in your custom type must be mutating instance methods that return Void. This code shows a custom interpolation type’s declaration of an appendInterpolation method that provides special validation for user input: あなたのあつらえの型におけるappendInterpolationメソッドは、Voidを返す変更インスタンスメソッドでなければなりません。このコードは、あるあつらえの補間型のもつappendInterpolationの宣言を示します、それはユーザ入力に対する特別な検証を提供します。


extension MyString.StringInterpolation {
    mutating func appendInterpolation(validating input: String) {
        // Perform validation of `input` and store for later use
    }
}

To use this interpolation method, create a string literal with an interpolation using the validating parameter label. この補間メソッドを使うには、validatingパラメータラベルを使用するある補間で文字列リテラルを作成してください。


let userInput = readLine() ?? ""
let myString = "The user typed '\(validating: userInput)'." as MyString

appendInterpolation methods support virtually all features of methods: they can have any number of parameters, can specify labels for any or all of their parameters, can provide default values, can have variadic parameters, and can have parameters with generic types. Most importantly, they can be overloaded, so a type that conforms to StringInterpolationProtocol can provide several different appendInterpolation methods with different behaviors. An appendInterpolation method can also throw; when a user writes a literal with one of these interpolations, they must mark the string literal with try or one of its variants. appendInterpolationメソッドそれらは、メソッドの全ての機能を事実上サポートします:それらは、どんな数のパラメータでも持つことができます、それらのパラメータのいくらかまたは全てにラベルを指定できます、省略時の値を提供できます、可変長引数を持つことができます、そして総称体型をもつパラメータを持つことができます。最も重要なことには、それらはオーバーロードされることができます、それでStringInterpolationProtocolに準拠する型は、いくつかの異なるappendInterpolationメソッドを異なる挙動で提供できます。appendInterpolationメソッドはまたスローできます;ユーザがあるリテラルをそれら補間の1つで書く場合、それらはその文字列リテラルをtryまたはそれの変種の1つで印しなければなりません。

Topics 話題

Associated Types さまざまな関連型

Initializers イニシャライザ

Instance Methods インスタンスメソッド

See Also 参照

String Literals 文字列リテラル