在swift中获取UIViewController的类名

时间:2014-10-14 10:22:37

标签: ios objective-c uiviewcontroller swift

如何在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的类方法,即最后一个屏幕

10 个答案:

答案 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