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でも利用したかったので↑のように書いていました。
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でも動作しました。