web-dev-qa-db-de.com

Holen Sie sich schnell den Klassennamen von UIViewController

So erhalten Sie den Klassennamen von UIViewController Class in Swift 

In Ziel C können wir so etwas tun:

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

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

    //.......

}

aber in Swift habe ich es so versucht 

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

kann das nicht tun. 

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

//....

}

keine Klassenmethode von UIViewController, dh der letzte Bildschirm

17
Qadir Hussain

Um Ihren Klassennamen zu kennen, können Sie so etwas anrufen:

var className = NSStringFromClass(yourClass.classForCoder)
40
juangdelvalle

In Swift 3 können Sie einfach den folgenden Code schreiben:

zum Beispiel:

let className = String(describing: self)

für den Unterricht: 

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

Der sauberste Weg, ohne den Namen Ihrer Klasse wissen zu müssen, ist so.

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

Erweiterung auf Juangdelvalles Antwort .

Ich habe dies als Erweiterung hinzugefügt, damit es wiederverwendbar ist und von jedem Ansichts-Controller einfacher aufgerufen werden kann. In einigen Fällen gibt NSStringFromClass in Swift einen String im folgenden Format zurück: 

<Projektname> .viewControllerClassName

Diese Erweiterungseigenschaft wird geändert, um das Projektnamenpräfix zu entfernen und nur den Klassennamen zurückzugeben.

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

Hier ist eine Swift3-Version von Isurus Antwort.

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

Schnell 4

Angenommen, wir haben eine Klasse mit dem Namen HomeViewController. Dann können Sie den Namen der Klasse mit folgendem Code erhalten:

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

Die classForCoder()-Methode gibt ein AnyClass-Objekt (Name Ihrer Klasse) zurück, das wir in einen String für den Benutzer konvertieren.

2
Naresh

Die Eigenschaft heißt in Swift dynamicType.

0
fluidsonic

Verwenden Sie String.init(describing: self.classForCoder)

beispiel:

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