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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- CustomStringConvertible
- CustomDebugStringConvertible
- Mirrorによるリフレクション
- デバッグしやすい型の構築