Meine App verwendet Hunderte von Unterklassen einer Zeichenklasse. (Diese Unterklassen werden automatisch aus Art-Dateien generiert.)Swift 3 - Klasse Name/Typ Suche
Idealerweise würde ich gerne die Namen einiger Unterklassen laden, prüfen, ob diese Unterklassen tatsächlich verfügbar sind, und falls ja, instanziieren.
Es scheint jedoch, dass der Mangel an NSClassFromString
-Style-Funktionalität in reinem Swift bedeutet, dass ich gezwungen bin, alle meine Klassennamen im Voraus zum Compiler zu deklarieren.
z.B. immer eine Klasse über eine sehr lange, mühsame switch-Anweisung:
func drawingObjectFromClassName(_ className: String) -> SomeDrawingProtocol?
{
switch className {
case "foo": return foo()
case "bar": return bar()
// etc.
default:
print("Warning: no class found for className: ", className)
return nil
}
}
Aber ich würde auch für die Existenz einer Unterklasse (zum Beispiel „foo“) überprüfen möge, ohne das Objekt zu instanziiert ist.
I könnte duplizieren, dass switch-Anweisung, dies zu tun, aber dann hätte ich zwei identische Sätze von Schlüsseln zu pflegen. Jawohl.
Eine mögliche Lösung besteht also darin, eine Nachschlagetabelle zu verwenden.
Frage: wenn ich hart-Code ein Wörterbuch mit allen meinen Unterklasse Namen wie die Tasten, welche Syntax kann ich für die Werte müssen, so dass ein abgerufenen Wert als Objekt der erforderlichen Klasse instanziiert werden kann ? Danke für jede Hilfe.
Sie könnten 'foo.self' zurückgeben, um ein Klassenobjekt (vom Typ' SomeDrawingProtocol.Type') zu erhalten. – kennytm