LoginSignup
7
6

More than 5 years have passed since last update.

Swift のカスタムオブジェクトを print する時に key: value 形式で表示させる

Posted at

Swift のカスタムオブジェクトを print すると、デフォルトだとクラス名が表示されるはず。

これを key: value のように求める形で表示させるには description プロパティをいじればいいのだが、全てのカスタムクラスに実装するのは大変なので、今回 NSOjbect を継承するクラスを作って、そのクラスを継承させることで解決するアプローチを取ってみた。

具体的には以下の様なコード。Mirror の children を map で回して key: value 形式の文字列を返して、できた配列を改行コード(\n)でつないだものを return している。

tanabee/CustomObject.swift

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 {
// クラス実装
}

なにか他に良い実装方法知ってる方いたら教えて下さい〜。

7
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6