Javaのクラスインスタンスを文字列から作成することは難しくありませんが、私は迅速で新しいことで、その言語で同じことを私にとっては非常に難しくしています。JavaからSwiftへのリフレクション
MOTIVATION:私は未知のコントローラーとその未知の方法(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);
スウィフト
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)
}
での私の試み
にはどうすれば迅速
セレクタ行は実際にエラーを起こすべきではありません。しかし、インスタンスではなくクラス参照のみを保持しているので、2番目のエラーは正当です。現在欠けているのは 'clazz.newInstance()'と同じです。 – luk2302
@ luk2302あなたは例を投稿できますか?残念ながら、私がjavaに投稿したような迅速な例はありません。 – Mystic
はNSObjectのサブクラスで渡すことができるすべてのクラスですか? – luk2302