我正在尝试从传递到我的函数的类中创建一个对象。问题是我无法将任何参数传递给它的构造函数,因为我似乎无法使用参数初始化
类。
这是我目前的代码:
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)定义为:
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
转换为字典。出于显而易见的原因,您不能简单地将字符串转换为字典。
您想查看 this answer还有另一个问题。
迂腐的注释:像这样使用动态类型和初始化匿名类是非常高级的用法,只有在非常极端的情况下才需要。通常是 Abstract Factory Pattern是实现类似目标的更好方法。
关于ios - 带有参数的 Swift 类型反射初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27332244/