我正在尝试从传递给我的函数的类创建一个对象。问题是我无法将任何参数传递给它的构造函数,因为我似乎不能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'
答案 0 :(得分:1)
据我所知,你的代码中发生了一些奇怪的事情(我也不是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
转换为字典。出于显而易见的原因,你不能简单地将字符串转换为字典。
您还希望查看另一个问题的this answer。
迂腐:使用动态类型和初始化这样的匿名类是非常高级的用法,只有在非常极端的情况下才需要。通常Abstract Factory Pattern是实现类似目标的更好方法。