it-swarm.com.ru

Получить имя класса 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){

    //.......

}

но в Свифте я попробовал вот так 

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

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

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

//....

}

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

17
Qadir Hussain

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

var className = NSStringFromClass(yourClass.classForCoder)
40
juangdelvalle

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

например:

let className = String(describing: self)

для занятий: 

let className = String(describing: YourViewController.self)
15
prabhu

Самый простой способ, без необходимости знать имя вашего класса, - вот так.

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

Расширение на Juangdelvalle's ответ .

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

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

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

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

Вот Swift3 версия ответа Исуру.

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

Swift 4

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

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

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

2
Naresh

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

0
fluidsonic

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

пример:

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