在swift中获取UIViewController的类名

Qad*_*ain 30 objective-c uiviewcontroller ios swift

如何UIViewController在swift中获取Class的类名

在Objective C中,我们可以这样做:

self.appDelegate = (shAppDelegate *)[[UIApplication sharedApplication] delegate];
    UIViewController *last_screen = self.appDelegate.popScreens.lastObject ;

    if(last_screen.class != self.navigationController.visibleViewController.class){

    //.......

}
Run Code Online (Sandbox Code Playgroud)

但是我很快就尝试过了

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let last_screen = appDelegate.popScreens?.lastObject as UIViewController
Run Code Online (Sandbox Code Playgroud)

不能这样做.

if last_screen.class != self.navigationController.visibleViewController.class{

//....

}
Run Code Online (Sandbox Code Playgroud)

没有类方法,UIViewController即最后一个屏幕

小智 52

要知道您的班级名称,您可以拨打以下内容:

var className = NSStringFromClass(yourClass.classForCoder)
Run Code Online (Sandbox Code Playgroud)


cno*_*gr8 25

最简洁的方法就是这样,无需知道你的班级名称.

let name = String(describing: type(of: self))
Run Code Online (Sandbox Code Playgroud)


pra*_*bhu 21

swift 3中的一个简单方法是编写以下代码:

为实例:

let className = String(describing: self)
Run Code Online (Sandbox Code Playgroud)

对于课程:

let className = String(describing: YourViewController.self)
Run Code Online (Sandbox Code Playgroud)


Isu*_*uru 12

扩展juangdelvalle的答案.

我将其添加为扩展名,以便可以从任何视图控制器调用它,并且更容易调用.在某些情况下,NSStringFromClass在Swift中返回一个字符串,格式如下:

<项目名称> .viewControllerClassName.

修改此扩展属性以删除项目名称前缀并仅返回类名称.

extension UIViewController {
    var className: String {
        return NSStringFromClass(self.classForCoder).componentsSeparatedByString(".").last!
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

斯威夫特 4

假设我们有 name 的类HomeViewController。然后您可以使用以下代码获取类名:

let class_name = "\(HomeViewController.classForCoder())"
Run Code Online (Sandbox Code Playgroud)

classForCoder()方法返回AnyClass对象(您的类的名称),我们将其转换为用户的字符串。


zin*_*gle 5

这是 isuru 答案的 swift3 版本。

extension UIViewController {
    var className: String {
        return NSStringFromClass(self.classForCoder).components(separatedBy: ".").last!;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 有一个额外的';' 到底。 (2认同)
  • :) @alasker 。我想我并不是一个快速的开发者。 (2认同)

小智 5

斯威夫特 5 解决方案:

extension NSObject {
  var className: String {
    return String(describing: type(of: self))
  }

  class var className: String {
    return String(describing: self)
  }
}
Run Code Online (Sandbox Code Playgroud)

用法:

class TextFieldCell: UITableVIewCell {
}

class LoginViewController: UIViewController {
  let cellClassName = TextFieldCell.className
}
Run Code Online (Sandbox Code Playgroud)