プロトコル
StringInterpolationProtocol
ビルド中の文字列リテラルの内容を補間で表します。
宣言
protocol StringInterpolationProtocol
概観
各 ExpressibleByStringInterpolation 型には、StringInterpolationProtoco lに準拠する StringInterpolation 型が関連しています。Swift は、"The time is \(tume)." のような式を MyString として、以下のような一連の文に変換します。
var interpolation = MyString.StringInterpolation(literalCapacity: 13,
interpolation.appendLiteral("The time is ")
interpolation.appendInterpolation(time)
interpolation.appendLiteral(".")
MyString(stringInterpolation: interpolation)
StringInterpolation 型は、appendLiteral(_:) と appendInterpolation メソッドに渡されたセグメントを収集し、それらを全体にアセンブルして、必要に応じて変換する責任があります。すべてのセグメントが付け加えられると、補間は作成中の型の init(stringInterpolation:) イニシャライザに渡され、StringInterpolation から累積データを抽出しなければなりません。
単純な場合では、ExpressibleByStringLiteral プロトコルに準拠する型の補間型として DefaultStringInterpolation を使用できます。デフォルトの補間を使用するには、型を ExpressibleByStringInterpolation に準拠させ、init(stringLiteral:String) を実装します。補間の中の値は文字列に変換され、他の文字列リテラルと同じようにそのイニシャライザに渡されます。
文字列補間の処理
カスタム補間型では、補間された各セグメントは、特別な appendInterpolation メソッドの呼び出しに変換されます。補間の括弧の内容は、呼び出しの引数リストとして扱われます。その引数リストには、複数の引数と引数ラベルを含めることができます。
- \(x) は appendInterpolation(x) に変換されます
- \(x, y) は appendInterpolation(x, y) に変換されます
- \(foo: x) は appendInterpolation(foo: x) に変換されます
- \(x, foo: y) は appendInterpolation(x, foo: y) に変換されます
カスタム型の appendInterpolation メソッドは、Void を返す変異インスタンスメソッドでなければなりません。このコードは、ユーザ入力に特別な検証を提供する appendInterpolation メソッドのカスタム補間型の宣言を示しています:
extension MyString.StringInterpolation {
}
この補間メソッドを使用するには、validating パラメータラベルを使用した補間で文字列リテラルを作成します。
let userInput = readLine() ?? ""
let myString = "The user typed '\(validating: userInput)'." as MyString
appendInterpolation メソッドは、実質的にすべてのメソッドの機能をサポートします。それらは任意の数のパラメータを持つことができ、パラメータの一部またはすべてにラベルを指定でき、デフォルト値を提供でき、可変個引数パラメータを持つことができ、汎用型のパラメータを持つことができます。最も重要なことは、それらはオーバーロードされる可能性があるため、StringInterpolationProtocol に準拠する型は、異なる動作を持ついくつかの異なる appendInterpolation メソッドを提供できます。appendInterpolation メソッドも throw できます。ユーザがこれらの補間のいずれか一つでリテラルを作成する場合、文字列リテラルを try またはそのバリアントの 1 つでマークしなければなりません。
トピックス
関連型
associatedtype StringLiteralType
リテラルセグメントに使用する必要がある型。
必須。
イニシャライザ
init(literalCapacity: Int, interpolationCount: Int)
文字列リテラルコンテンツで埋める準備ができた空のインスタンスを作成します。
必須。
インスタンスメソッド
func appendLiteral(Self.StringLiteralType)
補間にリテラルセグメントを付け加えます。
必須。
関連
準拠する型
Date.FormatString.StringInterpolation
LocalizedStringKey.StringInterpolation
OSLogInterpolation
String.LocalizationValue.StringInterpolation
以下も見よ
文字列リテラル
protocol ExpressibleByStringLiteral
文字列リテラルで初期化できる型。
protocol ExpressibleByExtendedGraphemeClusterLiteral
単一の拡張書記素クラスタを含む文字列リテラルで初期化できる型。
protocol ExpressibleByUnicodeScalarLiteral
単一の Unicode スカラ値を含む文字列リテラルで初期化できる型。
protocol ExpressibleByStringInterpolation
式を含む文字列リテラルを使用した文字列補間によって初期化できる型。
struct DefaultStringInterpolation
構築中の補間を使用して文字列リテラルを表します。
トップへ
トップへ
トップへ
トップへ
トップへ