web-dev-qa-db-ja.com

SwiftUIのText( "")イニシャライザとText(verbatim: "")イニシャライザの違い

私は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つのイニシャライザは何ですか?どのように違うのですか?いつ使用するのですか?

8
LinusGeffarth

Text(verbatim: )はテキストをそのまま返します-したがって、逐語的な引数名。

Text(:_)は、引数がローカライズされたキーかどうかを確認します。

そうであれば、対応するローカライズされた文字列を返します。

そうではなく、テキストverbatimを出力します。

11
Matteo Pacini

導入するいくつかのWWDC19セッションで述べたように、SwiftUIは、デフォルトで、エンドユーザーがアプリの基本的な要件を検討するが、開発者の作業を複雑にする傾向がある一連の優れたプラットフォームの動作を処理しようとします。

ローカリゼーションはその1つです。Textイニシャライザは自動的に正しいことを行います。例:

  • Text(“Some Text”)は、文字列リテラルをローカライズされたものとして扱います。これは、静的に定義されたテキストは、常にUIテキストを意図しているためです。
  • Ditto for Text(“\(items.count) items”)。フォーマット文字列を正しくローカライズし、補間された値を挿入します。
  • Text(item.name)は実行時にさまざまな文字列を動的にフィードするため、テキストはほぼ確実に「コンテンツ」であり、ロケールに関係なく同じままです(ユーザーから、プログラムの外部などから)。

つまり、99%の時間で、UIをセットアップするための最も自然で簡潔な呼び出しを行い、戻って一連のコードを変更する必要なく、ローカライズの準備が整ったアプリを得ることができます。他のUIフレームワークと。

また、アプリにこれらの想定に合わないビットがある場合、Text(verbatim:)およびText(_:tableName:bundle:comment:)を使用すると、ローカライズされていない静的テキストとローカライズされるプログラムテキストを作成できます。

5
rickster