associatedtype StringLiteralType
Overview 概要
Each Expressible
type has an associated String
type which conforms to String
. Swift converts an expression like "The time is \(time)." as My
into a series of statements similar to:
それぞれのExpressible
型は、ある結び付けられたString
型を持ちそれはString
に準拠します。Swiftは、"The time is \(time)." as My
のような式を、次のような一連の文に変換します:
The String
type is responsible for collecting the segments passed to its append
and append
methods and assembling them into a whole, converting as necessary. Once all of the segments are appended, the interpolation is passed to an init(string
initializer on the type being created, which must extract the accumulated data from the String
.
String
型は、それのappend
とappend
メソッドに渡される文節を集めること、そしてそれらをある全体へと、必要に応じて変換して、組み立てることに責任があります。一旦すべての文節が追加されるならば、補間はその作成されている型上でのinit(string
イニシャライザに渡されます、それは蓄積されたデータをString
から抽出しなければなりません。
In simple cases, you can use Default
as the interpolation type for types that conform to the Expressible
protocol. To use the default interpolation, conform a type to Expressible
and implement init(string
. Values in interpolations are converted to strings, and then passed to that initializer just like any other string literal.
単純な場合には、あなたはDefault
を補間型としてExpressible
プロトコルに準拠する型に対して使用できます。省略時の補間を使うには、型をExpressible
に準拠させて、そしてinit(string
を実装してください。補間の中の値は文字列に変換されます、そしてそれからそのイニシャライザに渡されます、ちょうど何か他の文字列リテラルのように。
Handling String Interpolations 文字列補間を取り扱う
With a custom interpolation type, each interpolated segment is translated into a call to a special append
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.
あるあつらえの補間型では、それぞれの補間される文節は特別なappend
メソッドへの呼び出しに翻訳されます。補間のもつ丸括弧の内容は、その呼び出しの引数リストとして扱われます。引数リストは、複数の引数そして引数ラベルを含むことができます。
The following examples show how string interpolations are translated into calls to append
:
以下の例は、どのように文字列補間がappend
への呼び出しに翻訳されるかを示します:
\(x)
translates toappend
Interpolation(x) \(x)
はappend
に翻訳されますInterpolation(x) \(x, y)
translates toappend
Interpolation(x, y) \(x, y)
はappend
に翻訳されますInterpolation(x, y) \(foo: x)
translates toappend
Interpolation(foo: x) \(foo: x)
はappend
に翻訳されますInterpolation(foo: x) \(x, foo: y)
translates toappend
Interpolation(x, foo: y) \(x, foo: y)
はappend
に翻訳されますInterpolation(x, foo: y)
The append
methods in your custom type must be mutating instance methods that return Void
. This code shows a custom interpolation type’s declaration of an append
method that provides special validation for user input:
あなたのあつらえの型におけるappend
メソッドは、Void
を返す変更インスタンスメソッドでなければなりません。このコードは、あるあつらえの補間型のもつappend
の宣言を示します、それはユーザ入力に対する特別な検証を提供します。
To use this interpolation method, create a string literal with an interpolation using the validating
parameter label.
この補間メソッドを使うには、validating
パラメータラベルを使用するある補間で文字列リテラルを作成してください。
append
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 String
can provide several different append
methods with different behaviors. An append
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.
append
メソッドそれらは、メソッドの全ての機能を事実上サポートします:それらは、どんな数のパラメータでも持つことができます、それらのパラメータのいくらかまたは全てにラベルを指定できます、省略時の値を提供できます、可変長引数を持つことができます、そして総称体型をもつパラメータを持つことができます。最も重要なことには、それらはオーバーロードされることができます、それでString
に準拠する型は、いくつかの異なるappend
メソッドを異なる挙動で提供できます。append
メソッドはまたスローできます;ユーザがあるリテラルをそれら補間の1つで書く場合、それらはその文字列リテラルをtry
またはそれの変種の1つで印しなければなりません。