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

More than 3 years have passed since last update.


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でも動作しました。