获取对象的类名为String,使用:
object_getClassName(myViewController)
返回如下内容:
_TtC5AppName22CalendarViewController
我正在寻找纯粹的版本:“CalendarViewController”。我如何得到一个清理类名字符串代替?
我发现了一些关于这个问题的尝试,但没有一个实际的答案。难道根本不可能吗?
获取对象的类名为String,使用:
object_getClassName(myViewController)
返回如下内容:
_TtC5AppName22CalendarViewController
我正在寻找纯粹的版本:“CalendarViewController”。我如何得到一个清理类名字符串代替?
我发现了一些关于这个问题的尝试,但没有一个实际的答案。难道根本不可能吗?
当前回答
斯威夫特5.2:
String(describing: type(of: self))
其他回答
Swift 3.0 (macOS 10.10及更高版本),你可以从className中获取它
self.className.components(separatedBy: ".").last!
斯威夫特3.0: 你可以创建一个像这样的扩展..它返回的是类名,而不是项目名
extension NSObject {
var className: String {
return NSStringFromClass(self as! AnyClass).components(separatedBy: ".").last ?? ""
}
public class var className: String {
return NSStringFromClass(self).components(separatedBy: ".").last ?? ""
}
}
斯威夫特5.1
你可以通过Self.self获取类、结构、枚举、协议和NSObject名称。
print("\(Self.self)")
我在Swift 2.2中使用它
guard let currentController = UIApplication.topViewController() else { return }
currentController.classForCoder.description().componentsSeparatedByString(".").last!
斯威夫特3.0
字符串(描述:MyViewController.self)