クラス名を取得するExtension


タイポ対策のためにクラス名を取得したいと思ったときに、いろいろ方法があったので残しておきます。

実装

import Foundation

extension NSObject {

    // from class
    class var className: String {
        return String(describing: self)
    }

    // from instance
    var className: String {
        return String(describing: type(of: self))
    }

}

上のやつがクラスから呼ばれるやつで、下のやつがインスタンスから呼ばれるやつです。
NSObjectというのはよく理解していないのですが、ほとんどのクラスの継承元となっているクラスで、強いて言うならルートクラスみたいなやつです。

挙動

print(UIView.className)
// "UIView"が出力される

let myLabel = UILabel()
print(myLabel.className)
// "UILabel"が出力される

応用例

    static let identifier = HistoryDateCell.className

cellのidentifierを登録するとき等に便利です!






他にも、インスタンス名とかファイル名とか取得する方法ってあるんですかね