0Pricing
Swift Academy · レッスン

CustomDebugStringConvertible

より詳しいデバッグ出力を提供します。

「CustomDebugStringConvertible」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

独立したデバッグ表示

CustomDebugStringConvertibleはdebugDescriptionを提供します。これはdebugPrint、LLDBのpoコマンド、デバッガーで使用される表示です。descriptionより詳しい内容にできます。

debugDescriptionを追加する

準拠し、プロパティを提供します。

struct Point: CustomDebugStringConvertible {
    let x: Int
    let y: Int
    var debugDescription: String { "Point(x: \(x), y: \(y))" }
}
debugPrint(Point(x: 1, y: 2))  // Point(x: 1, y: 2)

debugPrintとprintの違い

printはdescriptionを使用し、debugPrintはdebugDescriptionを使用します。

struct Money: CustomStringConvertible, CustomDebugStringConvertible {
    let cents: Int
    var description: String { "$\(Double(cents)/100)" }
    var debugDescription: String { "Money(cents: \(cents))" }
}
let m = Money(cents: 250)
print(m)       // $2.5
debugPrint(m)  // Money(cents: 250)

両方を提供する場合

きれいなユーザー向け出力にはdescriptionを使い、診断用の詳細情報(生の値や内部状態)にはdebugDescriptionを使います。両方を提供すると、それぞれの用途に適した表示ができます。

デバッグで詳細を表示する

ユーザーには見せるべきでない内部情報を表示します。

struct Session: CustomStringConvertible, CustomDebugStringConvertible {
    let user: String
    let token: String
    var description: String { "Session(\(user))" }
    var debugDescription: String { "Session(user: \(user), token: \(token))" }
}
let s = Session(user: "ann", token: "xyz")
print(s)       // Session(ann)
debugPrint(s)  // Session(user: ann, token: xyz)

コレクションのデバッグ出力

コレクションに対するdebugPrintでは、各要素のdebugDescriptionが使用されます。

struct Tag: CustomDebugStringConvertible {
    let name: String
    var debugDescription: String { "Tag(\(name))" }
}
debugPrint([Tag(name: "a"), Tag(name: "b")])  // [Tag(a), Tag(b)]

String(reflecting:)

String(describing:)がdescriptionを使うのと同様に、String(reflecting:)はdebugDescriptionを使います。

struct Code: CustomDebugStringConvertible {
    let n: Int
    var debugDescription: String { "Code<\(n)>" }
}
print(String(reflecting: Code(n: 7)))  // Code<7>

フォールバック動作

型がdescriptionだけを提供している場合、debugPrintはそれにフォールバックします。debugDescriptionだけを提供している場合、通常のprintはデフォルトのMirror形式を使用します。

struct Only: CustomStringConvertible {
    let v: Int
    var description: String { "Only(\(v))" }
}
debugPrint(Only(v: 3))  // Only(3)  -- falls back to description

デバッグ出力での引用符

Stringに対するdebugPrintでは、デバッグ用の表示であることを反映して、引用符が追加される点に注意してください。

print("hi")        // hi
debugPrint("hi")   // "hi"

情報を漏らさない診断

descriptionに秘密情報を含めないでください。ただし、ログが安全な場合に限り、debugDescriptionだけに含めることはできます。それぞれが何を明らかにするかを意識して選択してください。

struct Key: CustomStringConvertible {
    let secret: String
    var description: String { "Key(***)" }
}
print(Key(secret: "abc"))  // Key(***)

列挙型のデバッグ情報

列挙型では、元のcaseと関連値を明らかにするdebugDescriptionが役立ちます。

enum Load: CustomDebugStringConvertible {
    case idle
    case progress(Int)
    var debugDescription: String {
        switch self {
        case .idle: return "Load.idle"
        case .progress(let p): return "Load.progress(\(p))"
        }
    }
}
debugPrint(Load.progress(40))  // Load.progress(40)

確認問題

descriptionではなくdebugDescriptionを使用する関数はどれですか。

まとめ

CustomDebugStringConvertibleについて学びました。

  • 診断用の出力としてvar debugDescription: Stringを提供します
  • debugPrint、String(reflecting:)、デバッガーで使用されます
  • printはdescriptionを使い、debugPrintはdebugDescriptionを使います
  • 追加の内部情報はデバッグ用に入れ、descriptionには読みやすいテキストを入れます

次はMirrorによるリフレクションです。

よくある質問

「CustomDebugStringConvertible」レッスンは無料ですか?

はい。「CustomDebugStringConvertible」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「CustomDebugStringConvertible」で何を学びますか?

より詳しいデバッグ出力を提供します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「CustomDebugStringConvertible」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. CustomStringConvertible
  2. CustomDebugStringConvertible
  3. Mirrorによるリフレクション
  4. デバッグしやすい型の構築
← Swift Academyに戻る