获取对象的类名为String,使用:
object_getClassName(myViewController)
返回如下内容:
_TtC5AppName22CalendarViewController
我正在寻找纯粹的版本:“CalendarViewController”。我如何得到一个清理类名字符串代替?
我发现了一些关于这个问题的尝试,但没有一个实际的答案。难道根本不可能吗?
获取对象的类名为String,使用:
object_getClassName(myViewController)
返回如下内容:
_TtC5AppName22CalendarViewController
我正在寻找纯粹的版本:“CalendarViewController”。我如何得到一个清理类名字符串代替?
我发现了一些关于这个问题的尝试,但没有一个实际的答案。难道根本不可能吗?
当前回答
Swift 5.1:-
你也可以使用泛型函数获取对象的类名作为字符串
struct GenericFunctions {
static func className<T>(_ name: T) -> String {
return "\(name)"
}
}
使用以下方法调用此函数:-
let name = GenericFunctions.className(ViewController.self)
快乐编码:)
其他回答
斯威夫特3.0
字符串(描述:MyViewController.self)
你可以在Swift 4中像这样扩展NSObjectProtocol:
import Foundation
extension NSObjectProtocol {
var className: String {
return String(describing: Self.self)
}
}
这将使计算变量className对所有类可用。在CalendarViewController中的print()中使用这个将在控制台中打印“CalendarViewController”。
这个解决方案适用于所有的类
Swift 5解决方案:
extension NSObject {
var className: String {
return String(describing: type(of: self))
}
class var className: String {
return String(describing: self)
}
}
用法:
class TextFieldCell: UITableVIewCell {
}
class LoginViewController: UIViewController {
let cellClassName = TextFieldCell.className
}
要从对象中获取Swift类的名称,例如var object: SomeClass(),使用
String(describing: type(of: object))
要从类类型中获取Swift类的名称,例如SomeClass,使用:
String(describing: SomeClass.self)
输出:
" SomeClass "
你可以通过如下方式获取类名:
class Person {}
String(describing: Person.self)