LoginSignup
12

More than 5 years have passed since last update.

Swift1.2でクラス名が取得できなくなった

Last updated at Posted at 2015-05-22

Swift1.1までのやりかた

私はクラス名を取得するときの方法としてこれまでは↓のようにやっていました。

func ClassName (object: Any) -> String {
    let className = _stdlib_demangleName(_stdlib_getTypeName(object))
    if let range = className.rangeOfString(".") {
        return className.substringFromIndex(range.endIndex)
    }
    return className
}

NSStringFromClass() を利用するという方法もあるのですが、enumやstructでも利用したかったので↑のように書いていました。

参考:Swiftでクラス名を取得するメソッドを書いてみた

Swift1.2からのやりかた

という経緯から_stdlib_demangleName(_stdlib_getTypeName(object))を利用していましたが、1.2から_stdlib_getTypeNameが使えなくなったようで、コンパイルエラーとなってしまいます。
そこで、↓のように書きなおしたら問題なく動作するようになりました。

func ClassName (object: Any) -> String {
    let className = _stdlib_getDemangledTypeName(object)
    if let range = className.rangeOfString(".") {
        return className.substringFromIndex(range.endIndex)
    }
    return className
}

具体的にはこれまで

_stdlib_demangleName(_stdlib_getTypeName(object))

としていた部分を

_stdlib_getDemangledTypeName(object)

と書き直すことでコンパイルは通ります。

Playgroundで試したところ、期待通りの挙動だったので問題ないかと思われます。

enumやstructでも動作しました。

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
12