私はAppleの SwiftUIチュートリアル に従っています。その過程で、Text
オブジェクトを次のイニシャライザで頻繁に使用しました。
/// Creates an instance that displays `content` verbatim.
public init<S>(_ content: S) where S : StringProtocol
さて、シリーズの 第5のチュートリアル では、Text
の次の使用法に遭遇しました:
Text(verbatim: "")
インターフェースの説明は、他の初期化子と同じです。
/// Creates an instance that displays `content` verbatim.
public init(verbatim content: String)
2つのイニシャライザは何ですか?どのように違うのですか?いつ使用するのですか?
Text(verbatim: )
はテキストをそのまま返します-したがって、逐語的な引数名。
Text(:_)
は、引数がローカライズされたキーかどうかを確認します。
そうであれば、対応するローカライズされた文字列を返します。
そうではなく、テキストverbatimを出力します。
導入するいくつかのWWDC19セッションで述べたように、SwiftUIは、デフォルトで、エンドユーザーがアプリの基本的な要件を検討するが、開発者の作業を複雑にする傾向がある一連の優れたプラットフォームの動作を処理しようとします。
ローカリゼーションはその1つです。Text
イニシャライザは自動的に正しいことを行います。例:
Text(“Some Text”)
は、文字列リテラルをローカライズされたものとして扱います。これは、静的に定義されたテキストは、常にUIテキストを意図しているためです。Text(“\(items.count) items”)
。フォーマット文字列を正しくローカライズし、補間された値を挿入します。Text(item.name)
は実行時にさまざまな文字列を動的にフィードするため、テキストはほぼ確実に「コンテンツ」であり、ロケールに関係なく同じままです(ユーザーから、プログラムの外部などから)。つまり、99%の時間で、UIをセットアップするための最も自然で簡潔な呼び出しを行い、戻って一連のコードを変更する必要なく、ローカライズの準備が整ったアプリを得ることができます。他のUIフレームワークと。
また、アプリにこれらの想定に合わないビットがある場合、Text(verbatim:)
およびText(_:tableName:bundle:comment:)
を使用すると、ローカライズされていない静的テキストとローカライズされるプログラムテキストを作成できます。