2016-06-24 2 views
1

XCodeでデバッグしているときに、コレクションまたは辞書の変数を完全に展開して個々のプロパティの値を見ることができますか?XCodeでデバッグするときに配列の値を拡大する

例えば、私は、このオブジェクトを持っている:

User: 
name 
email 
phone 

私は、アプリケーションが実行されているときの周りに渡されています二人のユーザーの配列を持っており、デバッガでそれを調べることにしてみてください、私が見たときこれは:

po users 
▿ 2 elements 
    ▿ [0] : <User: 0x7fa3ab597fd0> 
    ▿ [1] : <User: 0x7fa3ab597bb0> 


po debugPrint(users) 
[MyApp.User, MyApp.User] 

po users[0].name 
"John" 

個別に調べることなくすべてのプロパティの値を確認するにはどうすればよいですか?

+0

さまざまな回答ありがとうございます。それぞれを試してみる必要があります。 – Prabhu

+0

あなたの質問に答えられた場合は、回答を受け入れたものとしてマークしてください。 – Alexander

答えて

0

CustomDebugStringConvertable

Kilian Koeltzsch's answerは良いですが、私は若干の改善が示唆さ:

はあなたのタイプはdebugDescriptionを実装することによってCustomDebugStringConvertableに準拠して行います。

extension User: CustomDebugStringConvertable{ 
    var debugDescription: String { 
     return "Name: \(name)" 
    } 
} 

debugDescriptionを使用すると、デバッグの目的でさらに冗長になりますが、一般的にはを予約します。

1

プロパティdescriptionを上書きして、独自の文字列を指定できます。

override var description: String { 
    return String(format: "Name: %@, Email: %@, Phone: %@", name, email, phone) 
    // Or simpler: return "Name: \(name), Email: \(email), Phone: \(phone)" 
} 

編集:このソリューションは、あなたのクラスがNSObjectから継承した場合の例です。これが当てはまらない場合は、CustomStringConvertibleに準拠してください。

+0

これは 'CustomStringConvertible'に従わなければ動作しないようです。私は次のようになる: 'error:プロパティはそのスーパークラスのプロパティをオーバーライドしない '。 –

+0

@KilianKoeltzschはい、クラスが 'NSObject'から継承する場合は動作しますが、私はこれがここに当てはまると思いました。そうでなければ 'CustomStringConvertible'に準拠する方がより汎用的な解決策です。 – Hejazi

+0

ああ、それをクリアしてくれてありがとう。私はめったに 'NSObject'を継承しませんでした。 –

1

UserのオブジェクトにはCustomStringConvertibleを実装し、必要に応じて印刷されます。

extension User: CustomStringConvertible { 
    var description: String { 
     return "Name: \(name)" 
    } 
} 
1

まず、p myArray代わりのpo myArrayを使用してみてください。

問題が解決しないと、デバッガですでにだと、あなたのオブジェクトの新しいdescriptionで再コンパイルしたくない場合は、あなたの代わりにこれを行うことができます:

po myArray.map { "\($0.val1), \($0.val2)"}

1

を使用してみてくださいdebugPrintの代わりにdumpです。スウィフト標準ライブラリから

はリファレンス機能:

dump(_:name:indent:maxDepth:maxItems:)

Dump an object's contents using its mirror to standard output.

Declaration
func dump<T>(_ x: T, name name: String? = default, indent indent: Int = default, maxDepth maxDepth: Int = default, maxItems maxItems: Int = default) -> T

関連する問題