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
Um Ihren Klassennamen zu kennen, können Sie so etwas anrufen:
var className = NSStringFromClass(yourClass.classForCoder)
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)
Der sauberste Weg, ohne den Namen Ihrer Klasse wissen zu müssen, ist so.
let name = String(describing: type(of: self))
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!
}
}
Hier ist eine Swift3-Version von Isurus Antwort.
extension UIViewController {
var className: String {
return NSStringFromClass(self.classForCoder).components(separatedBy: ".").last!;
}
}
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.
Die Eigenschaft heißt in Swift dynamicType
.
Verwenden Sie String.init(describing: self.classForCoder)
beispiel:
let viewControllerName = String.init(describing: self.classForCoder)
print("ViewController Name: \(viewControllerName)")