如何在swift中获取UIViewController
类的类名
在Objective C中,我们可以这样做:
self.appDelegate = (shAppDelegate *)[[UIApplication sharedApplication] delegate];
UIViewController *last_screen = self.appDelegate.popScreens.lastObject ;
if(last_screen.class != self.navigationController.visibleViewController.class){
//.......
}
但是我很快就尝试了这个
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let last_screen = appDelegate.popScreens?.lastObject as UIViewController
不能这样做。
if last_screen.class != self.navigationController.visibleViewController.class{
//....
}
没有UIViewController
的类方法,即最后一个屏幕
答案 0 :(得分:46)
要知道您的班级名称,您可以拨打以下内容:
var className = NSStringFromClass(yourClass.classForCoder)
答案 1 :(得分:17)
swift 3中的一个简单方法是编写以下代码:
例如:
let className = String(describing: self)
用于课程:
let className = String(describing: YourViewController.self)
答案 2 :(得分:17)
最简洁的方法是不需要知道你班级的名字就是这样。
let name = String(describing: type(of: self))
答案 3 :(得分:12)
扩展juangdelvalle的answer。
我将其添加为扩展名,以便可以从任何视图控制器调用它,并且更容易调用。此外,在某些情况下,Swift中的NSStringFromClass
会返回一个字符串,格式如下:
<强>&LT;项目名称&gt; .viewControllerClassName 。
修改此扩展属性以删除项目名称前缀并仅返回类名。
extension UIViewController {
var className: String {
return NSStringFromClass(self.classForCoder).componentsSeparatedByString(".").last!
}
}
答案 4 :(得分:4)
雨燕4
假设我们有一个名为HomeViewController
的类。然后,您可以使用以下代码获取类的名称:
let class_name = "\(HomeViewController.classForCoder())"
classForCoder()
方法返回AnyClass
对象(您的类的名称),我们将其转换为用户的字符串。
答案 5 :(得分:2)
这是isuru的答案的swift3版本。
extension UIViewController {
var className: String {
return NSStringFromClass(self.classForCoder).components(separatedBy: ".").last!;
}
}
答案 6 :(得分:1)
使用String.init(describing: self.classForCoder)
示例:
let viewControllerName = String.init(describing: self.classForCoder)
print("ViewController Name: \(viewControllerName)")
答案 7 :(得分:1)
怎么样:
extension NSObject {
static var stringFromType: String? {
return NSStringFromClass(self).components(separatedBy: ".").last
}
var stringFromInstance: String? {
return NSStringFromClass(type(of: self)).components(separatedBy: ".").last
}
}
答案 8 :(得分:1)
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
}
答案 9 :(得分:0)
该属性在Swift中被称为dynamicType
。