マクロ


DebugDescription()


説明定義をデバッガー型のサマリーに変換します。


iOS 8.0+ iPadOS 8.0+ Mac Catalyst 13.0+ macOS 10.10+

tvOS 9.0+ visionOS 1.0+ watchOS 2.0+

@attached(member) @attached(memberAttribute)
macro DebugDescription()




概観


このマクロは、Swift で記述された互換性のある記述実装を、Type Summary と呼ばれる LLDB 形式に変換します。Type SummaryLLDBdebugDescription に相当しますが、デバッグされたプロセス内でコードを実行しないという違いがあります。コード実行を回避することで、記述は潜在的な副作用なしに高速に生成され、IDE の変数リストなど、コード実行が行われない状況でも表示されます。


以下を例に考えてみましょう。この Team 構造体には、チーム名などの重要な詳細を要約した debugDescription があります。デバッガは、通常 po コマンドを使用して、オンデマンドでこの文字列のみを計算します。DebugDescription マクロを適用すると、一致する Type Summary が構築されます。これにより、ユーザは debugDescription を実行せずに、“Rams [11-2]” などの文字列を表示できます。これにより、デバッグ経験の使いやすさ、パフォーマンス、信頼性が向上します。


  1. @DebugDescription
  2. struct Team: CustomDebugStringConvertible {
  3. var name: String
  4. var wins, losses: Int
  5. var debugDescription: String {
  6. "\(name) [\(wins)-\(losses)]"
  7. }
  8. }

DebugDescription マクロは、debugDescriptiondescription の両方、および 3 番目のオプションである lldbDescription というプロパティもサポートします。最初の 2 つは、CustomDebugStringConvertible および CustomStringConvertible プロトコルに準拠している場合に実装されます。追加の lldbDescription プロパティは、debugDescriptiondescription の両方が実装されているが、DebugDescription マクロの要件を満たしていない場合に役立ちます。lldbDescription が実装されている場合、DebugDescriptiondebugDescriptiondescription よりも lldbDescription を選択します。同様に、debugDescriptiondescription よりも優先されます。



Description の要件


description (説明) の実装には以下の要件があります。


  • description の実装の本体は、単一の文字列式でなければなりません。文字列の連結はサポートされていないため、代わりに文字列補間を使用してください。

  • 文字列補間は、保存されたプロパティのみを参照できます。関数呼び出しやその他の任意の計算はサポートされていません。なお、条件付きロジックと計算されたプロパティはサポートされていません。

  • オーバーロードされた文字列補間は使用できません。




以下も見よ


型の反射をカスタマイズする


protocol CustomReflectable

自身のミラーを明示的に提供する型。


protocol CustomLeafReflectable

明示的に自身のミラーを提供する型ですが、その子孫クラスは customMirror もオーバーライドしない限りミラー内に表されません。


protocol CustomPlaygroundDisplayConvertible

プレイグラウンドのログ記録にカスタムの説明を提供する型。


typealias PlaygroundQuickLook

Quick Look 表現として使用できる型の合計。














トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ