【发布时间】:2014-09-09 14:12:42
【问题描述】:
我正在尝试创建一个委托协议,该协议实现了一个传递泛型类型数组的函数。我尝试了几种组合,但似乎没有一种能奏效。
这是我所达到的最近似的东西。这是协议:
protocol APIControllerProtocol {
typealias T
func didReceiveAPIResults(results: [T])
}
这是委托对象:
class APIController<U:APIControllerProtocol> {
typealias ElementType = U
var delegate: ElementType?
init(delegate: ElementType){
self.delegate = delegate
}
func getAPIResults(){
// Perform some action before delegation
// "results" is an Array of dictionaries got from NSJSONSerialization
self.delegate?.didReceiveAPIResults(results.map{dict in Album(json:dict)})
}
}
但是,最后一行出现此错误:“Album is not convertible to U.T”
“专辑”是用于返回结果的模型对象。
我做错了什么?
编辑:
在Mike S advice 之后,我将协议方法didReceiveAPIResults 设为通用函数,并指定T 在委托中的内容。但是,当接收类型 T 的参数并将其分配给委托中的属性时,我收到错误:“T 与 T 不同”
class TestDelegate: APIControllerProtocol {
typealias T = Album
var albums:[T] = [T]()
func didReceiveAPIResults<T>(results: [T]) {
// ...
self.albums = results //ERROR: "T is not identical to T"
}
}
【问题讨论】: