Das Erstellen von Klasseninstanzen in Java aus String ist nicht schwierig, aber ich bin neu in swift und mache dasselbe in dieser Sprache sehr schwierig für mich.Reflection von Java zu Swift
MOTIVATION:
Ich brauche unbekannte Controller und seine unbekannten Methoden aufrufen (MVC)
Java
String className = "MyClass";
String methodName = "MyMethod"; // with one argument like (String[] args) and return String
// in swift can be a Dictionary
String[] argument = new String[] {"A", "B"}
Class<?> clazz = Class.forName(className);
Object instance = clazz.newInstance();
Method method = clazz.getDeclaredMethod(methodName, Class<?>[]);
Object returnStringObject = method.invoke(instance, argument);
Mein Versuch in Swift
let clazz: AnyClass? = NSClassFromString(className)
if clazz != nil {
// ERRORRRRRR (use of unresolved identifier NSSelectorFromString)
let selector: Selector = NSSelectorFromString(methodName)
// ERRORRRRRR (cannot invoke performeSelector with an argument list of type selector)
clazz?.performSelector(selector)
}
Wie kann ich tun, um die gleiche Sache von Java zu schnellen
Die Auswahllinie sollte eigentlich keinen Fehler verursachen. ABER der zweite Fehler ist gerechtfertigt, da Sie derzeit nur die Klassenreferenz und keine Instanz haben. Was du jetzt vermisst, ist das Äquivalent zu "clazz.newInstance()". – luk2302
@ luk2302 Können Sie ein Beispiel veröffentlichen? leider gibt es keine solchen beispiele für swift wie das was ich in java gepostet habe. – Mystic
sind alle Klassen, die in der Unterklasse von NSObject übergeben werden können? – luk2302