使用以下方法将对象的类名获取为 String
:
object_getClassName(myViewController)
返回类似于这样的内容:
_TtC5AppName22CalendarViewController
我正在寻找纯净的版本:"CalendarViewController"
。那么如何获取一个清理过的类名字符串呢?
我找到了一些关于这个问题的尝试,但没有实际的答案。难道完全不可能吗?
使用以下方法将对象的类名获取为 String
:
object_getClassName(myViewController)
返回类似于这样的内容:
_TtC5AppName22CalendarViewController
我正在寻找纯净的版本:"CalendarViewController"
。那么如何获取一个清理过的类名字符串呢?
我找到了一些关于这个问题的尝试,但没有实际的答案。难道完全不可能吗?
你可以尝试这种方法:
self.classForCoder.description()
"\(type(of: myViewController))"
您可以在类型本身上使用.self
,并在实例上使用type(of:_)
函数:
// Both constants will have "UIViewController" as their value
let stringFromType = "\(UIViewController.self)"
let stringFromInstance = "\(type(of: UIViewController()))"
Swift 5:
方法一:
print("Class: \(String(describing: self)), Function: \(#function), line: \(#line)")
输出:
Class: <Test.ViewController: 0x7ffaabc0a3d0>, Function: viewDidLoad(), line: 15
第二种方法:
print("Class: \(String(describing: type(of: self))), Function: \(#function), line: \(#line)")
输出:
Class: ViewController, Function: viewDidLoad(), line: 16
_stdlib_getDemangledTypeName
,方法如下:let name = _stdlib_getDemangledTypeName(myViewController)
人们也可以使用镜子:
let vc = UIViewController()
String(Mirror(reflecting: vc).subjectType)
注意:此方法也适用于结构体和枚举。displayStyle可以显示结构的类型。
Mirror(reflecting: vc).displayStyle
返回值是一个枚举类型,因此您可以:
Mirror(reflecting: vc).displayStyle == .Class
NSObjectProtocol
:import Foundation
extension NSObjectProtocol {
var className: String {
return String(describing: Self.self)
}
}
className
对所有类都可用。在CalendarViewController
中使用print()
将会在控制台输出"CalendarViewController"
。Swift 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 ?? ""
}
}
我一直在找这个答案,我使用GKStateMachine并且希望观察状态变化,并想要一个简单的方法来查看类名。 我不确定它是iOS 10还是Swift 2.3,但在那个环境中,以下内容正好符合我的要求:
let state:GKState?
print("Class Name: \(String(state.classForCoder)")
// Output:
// Class Name: GKState
class Person {}
String(describing: Person.self)
@objc(YourClassName) class YourClassName{}
NSStringFromClass(YourClassName)