CustomStringConvertible
型の読みやすい説明文を定義します。
「CustomStringConvertible」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
CustomStringConvertibleとは
このプロトコルを使うと、型を出力するときや文字列に補間するときの表示方法を制御できます。descriptionプロパティを提供します。
デフォルトの表示は見づらい
これを使わない場合、構造体はすべてのメンバーを含む形式で出力されるため、多くの場合、情報が多すぎます。
struct Point { let x: Int; let y: Int }
print(Point(x: 1, y: 2)) // Point(x: 1, y: 2)descriptionを追加する
準拠し、var description: Stringを提供します。
struct Point: CustomStringConvertible {
let x: Int
let y: Int
var description: String { "(\(x), \(y))" }
}
print(Point(x: 1, y: 2)) // (1, 2)printとString(describing:)で使われる
提供したdescriptionは、printと文字列補間で使用されます。
struct Money: CustomStringConvertible {
let cents: Int
var description: String { "$\(Double(cents) / 100)" }
}
let m = Money(cents: 250)
print("price is \(m)") // price is $2.5descriptionと直接のプロパティの違い
descriptionは、人間が読みやすいユーザー向けのテキストを作るためのものです。そこから解析して元に戻すことは目的としていません。これは別の関心事であり、Codableを使います。読みやすさを保ってください。
列挙型を整形する
列挙型にわかりやすい名前を付けます。
enum Suit: CustomStringConvertible {
case hearts, spades
var description: String {
switch self {
case .hearts: return "Hearts"
case .spades: return "Spades"
}
}
}
print(Suit.hearts) // Heartsdescriptionを組み立てる
メンバーのdescriptionからdescriptionを組み立てます。
struct Card: CustomStringConvertible {
let rank: Int
let suit: String
var description: String { "\(rank) of \(suit)" }
}
let cards = [Card(rank: 1, suit: "H"), Card(rank: 13, suit: "S")]
print(cards.map { $0.description }) // ["1 of H", "13 of S"]コレクション内での使用
コレクションを出力すると、各要素のdescriptionが呼び出されます。
struct Tag: CustomStringConvertible {
let name: String
var description: String { "#\(name)" }
}
print([Tag(name: "swift"), Tag(name: "ios")]) // [#swift, #ios]補間ではdescriptionが使われる
文字列補間では、descriptionが自動的に使用されます。
struct Temperature: CustomStringConvertible {
let celsius: Int
var description: String { "\(celsius)C" }
}
let t = Temperature(celsius: 21)
print("Now: \(t)") // Now: 21C処理を軽く保つ
descriptionは、ロギングやデバッグなどで頻繁に呼び出される可能性があります。その中で重い処理を行わず、格納プロパティから単純な文字列を作るようにしてください。
struct ID: CustomStringConvertible {
let value: Int
var description: String { "ID#\(value)" }
}
print(ID(value: 42)) // ID#42条件付きの整形
状態に応じてdescriptionの内容を分岐させると、自然な表示にできます。
struct Stock: CustomStringConvertible {
let count: Int
var description: String {
count == 0 ? "Out of stock" : "\(count) in stock"
}
}
print(Stock(count: 0)) // Out of stock
print(Stock(count: 5)) // 5 in stock確認問題
CustomStringConvertibleが要求するプロパティはどれですか。
まとめ
CustomStringConvertibleについて学びました。
- ユーザー向けのテキストとして
var description: Stringを提供します print、String(describing:)、文字列補間で使用されます- 読みやすく軽量に保ち、元の値に戻すことを目的にしません
- コレクション内でも自動的に機能します
次はCustomDebugStringConvertibleです。
よくある質問
「CustomStringConvertible」レッスンは無料ですか?
はい。「CustomStringConvertible」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「CustomStringConvertible」で何を学びますか?
型の読みやすい説明文を定義します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「CustomStringConvertible」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- CustomStringConvertible
- CustomDebugStringConvertible
- Mirrorによるリフレクション
- デバッグしやすい型の構築