Swift のカスタムオブジェクトを print すると、デフォルトだとクラス名が表示されるはず。
これを key: value のように求める形で表示させるには description プロパティをいじればいいのだが、全てのカスタムクラスに実装するのは大変なので、今回 NSOjbect を継承するクラスを作って、そのクラスを継承させることで解決するアプローチを取ってみた。
具体的には以下の様なコード。Mirror の children を map で回して key: value 形式の文字列を返して、できた配列を改行コード(\n)でつないだものを return している。
import UIKit
class CustomObject: NSObject {
override var description: String {
let mirror = Mirror(reflecting: self)
return mirror.children.map { (element) -> String in
let key = element.label ?? "Undefined"
let value = element.value
if value is CustomObject || value is NSArray {
return "\(key): \(value.dynamicType)"
} else {
return "\(key): \(value)"
}
}.joinWithSeparator("\n")
}
}
A というクラスを key: value で吐かせるためには以下のように設定すれば良い
class A: CustomObject {
// クラス実装
}
なにか他に良い実装方法知ってる方いたら教えて下さい〜。