获取对象的类名为String,使用:
object_getClassName(myViewController)
返回如下内容:
_TtC5AppName22CalendarViewController
我正在寻找纯粹的版本:“CalendarViewController”。我如何得到一个清理类名字符串代替?
我发现了一些关于这个问题的尝试,但没有一个实际的答案。难道根本不可能吗?
获取对象的类名为String,使用:
object_getClassName(myViewController)
返回如下内容:
_TtC5AppName22CalendarViewController
我正在寻找纯粹的版本:“CalendarViewController”。我如何得到一个清理类名字符串代替?
我发现了一些关于这个问题的尝试,但没有一个实际的答案。难道根本不可能吗?
当前回答
我试着用Swift 3在Playground中输入(…)这是我的结果。 这是代码格式版本。
print(String(describing: type(of: UIButton.self)))
print(String(describing: type(of: UIButton())))
UIButton.Type
UIButton
其他回答
要从对象中获取Swift类的名称,例如var object: SomeClass(),使用
String(describing: type(of: object))
要从类类型中获取Swift类的名称,例如SomeClass,使用:
String(describing: SomeClass.self)
输出:
" SomeClass "
你可以像这样使用Swift标准库函数_stdlib_getDemangledTypeName:
let name = _stdlib_getDemangledTypeName(myViewController)
要获得类名为String,请按以下方式声明类
@objc(YourClassName) class YourClassName{}
并使用以下语法获取类名
NSStringFromClass(YourClassName)
你可以在Swift 4中像这样扩展NSObjectProtocol:
import Foundation
extension NSObjectProtocol {
var className: String {
return String(describing: Self.self)
}
}
这将使计算变量className对所有类可用。在CalendarViewController中的print()中使用这个将在控制台中打印“CalendarViewController”。
要在Swift 4中获得类型名为字符串(我没有检查早期版本),只需使用字符串插值:
"\(type(of: myViewController))"
你可以在类型本身上使用.self,在实例上使用type(of:_)函数:
// Both constants will have "UIViewController" as their value
let stringFromType = "\(UIViewController.self)"
let stringFromInstance = "\(type(of: UIViewController()))"