是否可以使用swift中的反射调用通用对象构造函数?

是否可以使用swift中的反射调用通用对象构造函数?,swift,reflection,Swift,Reflection,假设我们有一节课 class Test: NSObject { let batman: String let spiderman: Int let superman: NSObject init(batman: String, spiderman: Int, superman: NSObject) { self.batman = batman self.spiderman = spiderman

假设我们有一节课

class Test: NSObject {
    
    let batman: String
    let spiderman: Int
    let superman: NSObject
    
    init(batman: String, spiderman: Int, superman: NSObject) {
        self.batman = batman
        self.spiderman = spiderman
        self.superman = superman
    }
}
以及初始化的一般方法:

func resolve<T: NSObject>(args: Any...) throws -> T  {
        // if let object = initWithReflectionSomeHow(T.className, arg1, arg2...) {
        //     return object
        // } else {
        //     throw exception
        // }
    }

但不确定如何注入参数。甚至有可能吗?

如果您已经可以调用
resolve
,为什么不直接初始化对象?@Sweeper,因为对象可以有
resolve
可以处理的其他依赖项。例如,如果要使用依赖于某些服务的viewModel初始化viewController,则解析也会创建这些服务和viewModel,并将它们注入viewController中。否则,您将不得不在需要viewController的任何时候和任何地方手动执行所有这些操作etc@JoakimDanielson是的,我可以从技术上做到这一点,但我正在尝试创建一个基于容器的自定义依赖项注入类,该类利用对象初始化的反射。如果这很明显是可能的。如果在
NSObject
子类中有多个init(例如
initWithSomething:
initWithSomething2:
),并且具有相同数量的参数,您将如何选择合适的init?如果您已经可以调用
resolve
,为什么不直接初始化对象?@Sweeper,因为对象可以有
解析的其他依赖项。例如,如果要使用依赖于某些服务的viewModel初始化viewController,则解析也会创建这些服务和viewModel,并将它们注入viewController中。否则,您将不得不在需要viewController的任何时候和任何地方手动执行所有这些操作etc@JoakimDanielson是的,我可以从技术上做到这一点,但我正在尝试创建一个基于容器的自定义依赖项注入类,该类利用对象初始化的反射。如果这很明显是可能的。如果在
NSObject
子类中有多个init(例如
initWithSomething:
initWithSomething2:
)具有相同数量的参数,您将如何选择合适的init?
func resolve<T: NSObject>() throws -> T  {
        if let objectClass = NSClassFromString(T.className) as? T.Type {
            let object = objectClass.init()
            return object
        } else {
            //throw classNotFoundException
        }
    }
let obj = try resolve() as Test