ネットに色々なクラス名取得の方法が溢れていたので、まとめました。
モジュール名が入るパターン
こういうコードを使うとモジュール名が含まれます。
モジュール名+クラス名.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