Получить имя класса UIViewController в swift

Как получить имя класса UIViewController Класс в swift

В Objective C мы можем сделать что-то вроде этого:

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

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

    //.......

}

но в swift я так старался

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let last_screen = appDelegate.popScreens?.lastObject as UIViewController

Не могу этого сделать.

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

//....

}

нет метода класса UIViewController на последнем экране

Ответ 1

Чтобы узнать имя вашего класса, вы можете вызвать что-то вроде этого:

var className = NSStringFromClass(yourClass.classForCoder)

Ответ 2

Это самый чистый способ без необходимости знать имя вашего класса.

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

Ответ 3

Простой способ в swift 3 - написать следующий код:

для случаев:

let className = String(describing: self)

для занятий:

let className = String(describing: YourViewController.self)

Ответ 4

Расширение на juangdelvalle answer.

Я добавил это как расширение, чтобы его можно было повторно использовать и проще было вызвать с любого контроллера. Также в некоторых случаях NSStringFromClass в Swift возвращает строку в следующем формате:

< имя проектa > .viewControllerClassName.

Это свойство расширения изменяется, чтобы избавиться от префикса имени проекта и вернуть только имя класса.

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

Ответ 5

Swift 4

Предположим, у нас есть класс с именем HomeViewController. Затем вы можете получить имя класса с помощью следующего кода:

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

Метод classForCoder() возвращает объект AnyClass (имя вашего класса), который мы конвертируем в строку для пользователя.

Ответ 6

Вот версия ответа isuru swift3.

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

Ответ 7

Используйте String.init(describing: self.classForCoder)

Пример:

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

Ответ 8

Свойство называется dynamicType в Swift.

Ответ 9

Как насчет:

    extension NSObject {

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

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