繁体   English   中英

快速获取 UIViewController 的类名

[英]Get class name of UIViewController in 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 {

//....

}

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

要知道您的班级名称,您可以这样称呼:

var className = NSStringFromClass(yourClass.classForCoder)

不需要知道您的班级名称的最干净的方法是这样的。

let name = String(describing: type(of: self))

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

为实例:

let className = String(describing: self)

对于课程:

let className = String(describing: YourViewController.self)

扩展 juangdelvalle 的答案

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

<项目名称>.viewControllerClassName

修改此扩展属性以摆脱项目名称前缀并仅返回类名称。

extension UIViewController {
    var className: String {
        NSStringFromClass(self.classForCoder).components(separatedBy: ".").last!
    }
}

斯威夫特 4

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

let class_name = "\(HomeViewController.classForCoder())"

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

这是 isuru 答案的 swift3 版本。

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

斯威夫特 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 中称为dynamicType

使用String.init(describing: self.classForCoder)

例子:

let viewControllerName = String.init(describing: self.classForCoder)
print("ViewController Name: \(viewControllerName)")

怎么样:

    extension NSObject {

    static var stringFromType: String? {
        return NSStringFromClass(self).components(separatedBy: ".").last
    }

    var stringFromInstance: String? {
        return NSStringFromClass(type(of: self)).components(separatedBy: ".").last
    }
}

我们也可以这样做: Swift 5.1 中的String(describing: Self.self)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM