437 Stimmen

Erhalten Sie den Klassennamen des Objekts als Zeichenfolge in Swift

Die Klassenbezeichnung eines Objekts als String mit folgendem Code erhalten:

object_getClassName(myViewController)

liefert etwas Ähnliches wie:

_TtC5AppName22CalendarViewController

Ich suche die reine Version: "CalendarViewController". Wie kann ich stattdessen einen bereinigten String des Klassennamens erhalten?

Ich habe einige Versuche von Fragen dazu gefunden, aber keine tatsächliche Antwort. Ist es überhaupt nicht möglich?

0voto

Alexander Khitev Punkte 6073

Ich benutze es in Swift 2.2

guard let currentController = UIApplication.topViewController() else { return }
currentController.classForCoder.description().componentsSeparatedByString(".").last!

-1voto

Makalele Punkte 7169

In meinem Fall hat String(describing: self) etwas wie folgt zurückgegeben:

< My_project.ExampleViewController: 0x10b2bb2b0>

Aber ich hätte gerne etwas Ähnliches wie getSimpleName auf Android.

Also habe ich eine kleine Erweiterung erstellt:

extension UIViewController {

    func getSimpleClassName() -> String {
        let describing = String(describing: self)
        if let dotIndex = describing.index(of: "."), let commaIndex = describing.index(of: ":") {
            let afterDotIndex = describing.index(after: dotIndex)
            if(afterDotIndex < commaIndex) {
                return String(describing[afterDotIndex ..< commaIndex])
            }
        }
        return describing
    }

}

Und jetzt gibt es zurück:

ExampleViewController

Die Erweiterung von NSObject anstelle von UIViewController sollte auch funktionieren. Die obige Funktion ist auch fehlersicher :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X