web-dev-qa-db-fra.com

Obtenez le nom de la classe de UIViewController dans swift

Comment obtenir le nom de classe de UIViewController Class à Swift 

En Objective C, nous pouvons faire quelque chose comme ceci:

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

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

    //.......

}

mais dans Swift j'ai essayé comme ça 

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

je ne peux pas faire ça. 

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

//....

}

pas de méthode de classe de UIViewController c'est-à-dire le dernier écran

17
Qadir Hussain

Pour connaître le nom de votre classe, vous pouvez appeler quelque chose comme ceci:

var className = NSStringFromClass(yourClass.classForCoder)
40
juangdelvalle

Un moyen simple dans Swift 3 consiste à écrire le code ci-dessous:

par exemple:

let className = String(describing: self)

pour les cours: 

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

La manière la plus propre sans avoir besoin de connaître le nom de votre classe est la suivante.

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

En développant juangdelvalle réponse .

J'ai ajouté cela en tant qu'extension, de sorte qu'il soit réutilisable et qu'il soit plus facile d'appeler depuis n'importe quel contrôleur de vue. De plus, dans certains cas, NSStringFromClass dans Swift renvoie une chaîne au format suivant: 

<nom du projet> .viewControllerClassName

Cette propriété d'extension est modifiée pour supprimer le préfixe du nom de projet et ne renvoyer que le nom de la classe.

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

Voici une version Swift3 de la réponse d’isuru.

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

Swift 4

Supposons que nous ayons classe avec le nom HomeViewController. Ensuite, vous pouvez obtenir le nom de la classe avec le code suivant:

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

La méthode classForCoder() renvoie l'objet AnyClass (nom de votre classe) que nous convertissons en chaîne pour l'utilisateur.

2
Naresh

La propriété s'appelle dynamicType dans Swift.

0
fluidsonic

Utilisez String.init(describing: self.classForCoder)

exemple:

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