I have a method that has a method called performRequest() . It takes a JSONRequest parameter. JSONRequest looks something like this:
public typealias JSONCompletionHandler = ([Entity]?, NSError?) -> Void public class JSONRequest: Request { public var completionHandler: JSONCompletionHandler public var endPoint: String }
And performRequest() looks like this:
public func performJSONRequest<T where T: Entity>(jsonRequest: JSONRequest, _: Type) {
As you can see, it calls convertJSONData() , which looks like this:
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
Entity is a protocol that matches all of my model classes, such as Author and Book .
It defines one method: init(json: JSON) . Since T defined as T:Entity , I can simply call T:(json: obj) to instantiate any class matching Entity .
I want to use performJSONRequest() to execute a query for any object matching the object. For example, I want to create a query for book instances as follows:
var request = JSONRequest(endPoint: "books") { (let object: [Entity]?, let error: NSError?) -> Void in
For life, I cannot find out how I will implement this. Right now, I am getting an error in the performJSONRequest() method saying 'T' is not identical to 'Entity' . If I define the array in the completion handler as [AnyObject] , I get the same error: 'T' is not identical to 'AnyObject' .
Thanks for any help!