我有一个方法,它有一个名为performRequest()
。这需要一个JSONRequest
范围。JSONRequest
看起来像这样:
public typealias JSONCompletionHandler = ([Entity]?, NSError?) -> Void
public class JSONRequest: Request {
public var completionHandler: JSONCompletionHandler
public var endPoint: String
}
And performRequest()
看起来像这样:
public func performJSONRequest<T where T: Entity>(jsonRequest: JSONRequest, _: Type) {
// Make a request which returns a data object
var entities = self.convertJSONData(data, jsonKey: jsonRequest.jsonKey, T.self)
// Error: 'T' is not identical to 'Entity'
jsonRequest.completionHandler(entities, error)
}
正如你所看到的,它调用convertJSONData()
看起来像这样:
func convertJSONData<T where T: Entity>(jsonData: AnyObject, _: T.Type) -> [T] {
// Convert the data into Swift collection classes, enumerate over them, and create model objects
var json = JSON(data: jsonData as NSData, options: nil, error: nil)
var entities = [T]()
for obj in json {
let book = T(json: obj)
entities.append(book)
}
return entities
实体是我所有模型类的协议,例如Author
and Book
, 符合。
它定义了一种方法:init(json: JSON)
. Since T
定义为T:Entity
,我可以打电话T:(json: obj)
创建符合以下条件的任何类的实例Entity
.
我希望能够使用performJSONRequest()
执行请求any符合实体的对象。例如,我想为 Book 实例构建一个请求,如下所示:
var request = JSONRequest(endPoint: "books") { (let object: [Entity]?, let error: NSError?) -> Void in
// Cast object to [Book] and have fun
}
performJSONRequest<Book>(request)
我一生都无法弄清楚如何实现这一点。现在,我收到一个错误performJSONRequest()
方法说'T' is not identical to 'Entity'
。如果我在完成处理程序中将数组定义为[AnyObject]
我犯了同样的错误:'T' is not identical to 'AnyObject'
.
谢谢你的帮助!