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?

18voto

陈方涛 Punkte 181

Sie können es auf diese Weise versuchen:

self.classForCoder.description()

16voto

Ashvin A Punkte 7293

Swift 5:

Weg 1:

print("Klasse: \(String(describing: self)), Funktion: \(#function), Zeile: \(#line)")

Ausgabe:

Klasse: , Funktion: viewDidLoad(), Zeile: 15

Weg 2:

print("Klasse: \(String(describing: type(of: self))), Funktion: \(#function), Zeile: \(#line)")

Ausgabe:

Klasse: ViewController, Funktion: viewDidLoad(), Zeile: 16

15voto

Misha Karpenko Punkte 2148

Um den Typnamen als Zeichenfolge in Swift 4 (Ich habe die früheren Versionen nicht überprüft) zu erhalten, verwenden Sie einfach die Zeichenketteninterpolation:

"\(type(of: myViewController))"

Sie können .self auf einen Typ selbst und die Funktion type(of:_) auf eine Instanz anwenden:

// Beide Konstanten haben "UIViewController" als Wert
let stringFromType = "\(UIViewController.self)"
let stringFromInstance = "\(type(of: UIViewController()))"

13voto

Jernej Strasner Punkte 4530

Sie können die Funktion der Swift-Standardbibliothek namens _stdlib_getDemangledTypeName wie folgt verwenden:

let name = _stdlib_getDemangledTypeName(myViewController)

10voto

Paul Ardeleanu Punkte 6380

Man kann auch Spiegel verwenden:

let vc = UIViewController()

String(Mirror(reflecting: vc).subjectType)

NB: Diese Methode kann auch für Strukturen und Enums verwendet werden. Es gibt ein displayStyle, das einen Hinweis darauf gibt, um welche Art es sich bei der Struktur handelt:

Mirror(reflecting: vc).displayStyle

Die Rückgabe ist ein Enum, also kannst du:

Mirror(reflecting: vc).displayStyle == .Class

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