繁体   English   中英

使用参数进行Swift类型反射初始化

[英]Swift type reflexion initialization with parameters

我正在尝试从传递给我的函数的类中创建一个对象。 问题是我无法将任何参数传递给其构造函数,因为我似乎无法使用参数initialize类。

这是我到目前为止的代码:

class func invokeService<T: Initable>(service: String, returningClass: T.Type, completionHandler handler: ((T) -> ())) {

        var interfaceObject = returningClass()

        interfaceObject.self(data: service as Dictionary <String, AnyObject>)

        handler(interfaceObject)
    }

这是我得到的错误:

'(data: Dictionary <String, AnyObject>)-> $T2' is not identical to 'T'

据我所知,您的代码中发生了一些奇怪的事情(我也不是Swift专家)。 具体来说,您尝试两次初始化同一对象。

我假设您的Initable协议定义为:

protocol Initable {
    init(data:Dictionary <String, AnyObject>)
}

并且您想从中实例化一个对象。 那么正确的方法是:

class func invokeService<T: Initable>(service: String, returningClass: T.Type, completionHandler handler: ((T) -> ())) {

    var dict = // create a Dictionary <String, AnyObject>
    var interfaceObject = returningClass(data: dict)

    handler(interfaceObject)
}

现在您剩下的问题是如何将service转换为字典。 由于明显的原因,您不能简单地将字符串转换为字典。

您也想看看另一个问题的答案

Pedantic注释:使用动态类型并像这样初始化匿名类是非常高级的用法,仅在极端情况下才需要。 通常, 抽象工厂模式是实现类似目标的更好方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM