gpt4 book ai didi

java - 从 Java 到 Swift 的反射

转载 作者:搜寻专家 更新时间:2023-11-01 07:17:23 33 4
gpt4 key购买 nike

在 Java 中从字符串创建类实例并不困难,但我是 swift 的新手,用该语言做同样的事情对我来说非常困难。

动机:

我需要调用未知 Controller 及其未知方法 (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);

我对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)
}

我怎样才能从 Java 到 swift 做同样的事情

最佳答案

以下内容可能对您有用:

let cla = NSClassFromString(className)
if let cla = cla as? NSObject.Type {
let selector: Selector = NSSelectorFromString(methodName)
let instance = cla.init()
if (instance.responds(to: selector)) {
print(instance.perform(selector))
} else {
print("method not found")
}
} else {
print("class not found")
}

请注意,简单地拥有一个 [String:ControllerInstances] 的映射/字典可能会让事情变得更简单,输入更安全,您可以从中选择目标 Controller 。这样你的 Controller 可以有更复杂的初始化器,你将有每个初始化器的一个托管实例,而不是一遍又一遍地创建它们。

关于java - 从 Java 到 Swift 的反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41382305/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com