2016-05-17 2 views
1

UPDATEAlamofireObjectMapping Ошибка: Не удается вызвать GET

Мой запрос POST в Login.swift возвращает значения, которые я хотел бы отображенные к переменным в Particulars.swift (например, токен) и расширением, записываемые в области , Как мне это сделать?

Мой Login.swift код:

import Foundation 
import Alamofire 
import SwiftyJSON 
import RealmSwift 
import ObjectMapper 
import AlamofireObjectMapper 


class Login { 


init(userName: String, passWord: String) { 
    Data.sharedInstance.userName = userName 
    Data.sharedInstance.passWord = passWord 
} 

// call this method to login 
func getRequest() { 

    Alamofire.request(.POST, Data.todoEndpoint, parameters: ["username": Data.sharedInstance.userName!, "password": Data.sharedInstance.passWord!]) 
     .responseJSON { response in 

      if let result = response.result.value 
      { 
       let value = JSON(result) 

        if let api_key = value["api_token"].string 
        { 
         print("The token is " + api_key) 

        } 

        else 
        { 
         print("error parsing api token") 
        } 

      } 
      else 
      { 
       print("JSON data is nil.") 
      } 


    } 

} 


} 

Я пытаюсь сопоставить свои запросы JSON в Realm, но я продолжаю быть брошенным эту ошибку

Generic parameter 'T' could not be inferred

Это то, что я ищу для: (все в отдельных файлах)

отправить GET-запросы -> сохранить в realm/создать новый объект, если он не существует/объект обновления

Как это исправить?

Error calling GET method

код для вызова GET запрос (полный код здесь https://codeshare.io/l4cEQ)

FetchData.get(Particulars.self, success: { 
          print("success!!!") 
        }) { 
         print("fail!!!") 
        } 

код для обработки GET Request

import Foundation 
import Alamofire 
import ObjectMapper 
import AlamofireObjectMapper 
import RealmSwift 

class FetchData { 
static func get <T:Object where T:Mappable,T:Meta> (type:T.Type,success:()->Void,fail:()->Void)->Void { 
    Alamofire.request(Method.GET, type.url()) 
     .responseArray { (response: Response<[T], NSError>) in 
      switch response.result { 
      case .Success: 
       let items = response.result.value 
       if let items = items { 
        let realm = try! Realm() 
        try! realm.write { 
         for item in items { 
          realm.add(item, update: true) 
         } 
        } 
        success() 
       } 
      case .Failure(_): 
       fail() 
       break 
      } 
    } 
} 
} 

код для отображения объектов (Particulars.swift)

import Foundation 
import RealmSwift 
import ObjectMapper 

protocol Meta { 
static func url()->String 
} 

class Particulars: Object, Mappable { 
dynamic var name = "" 
dynamic var email = "" 
dynamic var id = 0 
dynamic var profilePicture = "" 
dynamic var username = "" 
dynamic var apiToken = "" 

override static func primaryKey() -> String? { 
    return "id" 
} 

//Impl. of Mappable protocol 
required convenience init?(_ map: Map) { 
    self.init() 
} 

func mapping(map: Map) { 
    id <- map["id"] 
    name <- map["name"] 
    email <- map["email"] 
    profilePicture <- map["profile_picture"] 
    username <- map["username"] 
    apiToken <- map["api_token"] 
} 

//Impl. of Meta protocol 
static func url()->String { 
    return "https://bitbucket.org/hyphe/blog-examples/raw/master/fetchData/demoapi/books" 
} 

} 

ответ

1

Проблема заключается в том, что ваш Particulars класс не объявляет его соответствие с Meta, и поэтому программа проверки не считает допустимым вход вашего метода get. Вы должны явно заявить о соответствии; просто требуемых методов недостаточно:

class Particulars: Object, Mappable, Meta { 
    ... 
} 
+0

Фактически в моем классе Login ответ POST дал мне значения, которые я ищу. Есть ли способ, чтобы я мог непосредственно сопоставить его с переменными класса Particulars? (Я обновил свой ответ, чтобы показать это) – noobdev

 Смежные вопросы

  • Нет связанных вопросов^_^