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?

9voto

Siddharth Bhatt Punkte 613

Sie können NSObjectProtocol in Swift 4 wie folgt erweitern :

import Foundation

extension NSObjectProtocol {

    var className: String {
        return String(describing: Self.self)
    }
}

Dadurch wird die berechnete Variable className für ALLE Klassen verfügbar gemacht. Wenn Sie dies in einem print() in CalendarViewController verwenden, wird "CalendarViewController" in der Konsole gedruckt.

9voto

Exception Punkte 785

Swift 3.0: Sie können eine Erweiterung wie diese erstellen. Es gibt den Klassennamen ohne den Projektnamen zurück

extension NSObject {
    var className: String {
        return NSStringFromClass(self as! AnyClass).components(separatedBy: ".").last ?? ""
    }

    public class var className: String {
        return NSStringFromClass(self).components(separatedBy: ".").last ?? ""
    }
}

6voto

Ale Mohamad Punkte 344

Sie können den Namen der Klasse bekommen, indem Sie etwas wie:

class Person {}
String(describing: Person.self)

6voto

Troy Punkte 5179

Ich habe eine Weile nach dieser Antwort gesucht. Ich benutze GKStateMachine und möchte Zustandsänderungen beobachten und wollte auf einfache Weise nur den Klassennamen sehen. Ich bin mir nicht sicher, ob es nur iOS 10 oder Swift 2.3 ist, aber in dieser Umgebung tut das Folgende genau das, was ich möchte:

let state:GKState?
print("Klassenname: \(String(state.classForCoder)")

// Ausgabe:    
// Klassenname: GKState

5voto

Moin Uddin Punkte 351

Um den Klassennamen als String zu erhalten, deklarieren Sie Ihre Klasse wie folgt

@objc(YourClassName) class YourClassName{}

Und rufen Sie den Klassennamen mit folgender Syntax ab

NSStringFromClass(YourClassName)

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