LoginSignup
38
23

More than 3 years have passed since last update.

Swift4でのクラス名取得方法まとめ

Last updated at Posted at 2017-10-04

ネットに色々なクラス名取得の方法が溢れていたので、まとめました。

モジュール名が入るパターン

こういうコードを使うとモジュール名が含まれます。

モジュール名+クラス名.swift
var className: String {
        get {
            return NSStringFromClass(type(of: self)) // ModuleName.ClassName
        }
    }

クラス名のみのパターン1(最もスマート)

クラス名のみ(スマート).swift
var className: String {
    return String(describing: type(of: self)) // ClassName
}

ps: @mono0926 さんのご指摘により、こちら追加しました。一番スマートなコードですね!ありがとうございます!

クラス名のみのパターン2(スマートじゃない)

クラス名を取得したいクラスで実装してください。

クラス名のみ(スマートじゃない).swift
var className: String {
        get {
            let classNameIncludeModuleName = NSStringFromClass(type(of: self))
            // モジュール名を取り除く必要がある
            let startIndex = classNameIncludeModuleName.index(of: ".")!
            let indexAfterModuleName = classNameIncludeModuleName.index(after: startIndex)
            // Module. 以降のインデックスを使ってクラス名のみを抜き出す。
            // Swift4からsubstring(to:)がdeprecatedになって、このような書き方になった。
            let classname = classNameIncludeModuleName[indexAfterModuleName...]
            return String(classname)  // ClassName
        }
    }

Swift4での文字列の切り出し方法はこちらを参考にしました。
http://gootara.org/library/2017/09/swift4substr.html

38
23
3

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
38
23