Ответ 1
Чтобы узнать имя вашего класса, вы можете вызвать что-то вроде этого:
var className = NSStringFromClass(yourClass.classForCoder)
Как получить имя класса 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
на последнем экране
Чтобы узнать имя вашего класса, вы можете вызвать что-то вроде этого:
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 answer.
Я добавил это как расширение, чтобы его можно было повторно использовать и проще было вызвать с любого контроллера. Также в некоторых случаях NSStringFromClass
в Swift возвращает строку в следующем формате:
< имя проектa > .viewControllerClassName.
Это свойство расширения изменяется, чтобы избавиться от префикса имени проекта и вернуть только имя класса.
extension UIViewController {
var className: String {
return NSStringFromClass(self.classForCoder).componentsSeparatedByString(".").last!
}
}
Swift 4
Предположим, у нас есть класс с именем HomeViewController
. Затем вы можете получить имя класса с помощью следующего кода:
let class_name = "\(HomeViewController.classForCoder())"
Метод classForCoder()
возвращает объект AnyClass
(имя вашего класса), который мы конвертируем в строку для пользователя.
Вот версия ответа isuru swift3.
extension UIViewController {
var className: String {
return NSStringFromClass(self.classForCoder).components(separatedBy: ".").last!;
}
}
Используйте String.init(describing: self.classForCoder)
Пример:
let viewControllerName = String.init(describing: self.classForCoder)
print("ViewController Name: \(viewControllerName)")
Свойство называется dynamicType
в Swift.
Как насчет:
extension NSObject {
static var stringFromType: String? {
return NSStringFromClass(self).components(separatedBy: ".").last
}
var stringFromInstance: String? {
return NSStringFromClass(type(of: self)).components(separatedBy: ".").last
}
}