2016-05-17 68 views
1

UPDATEAlamofireObjectMapping錯誤:無法調用get

在Login.swift我POST請求返回,我想映射到變量Particulars.swift(如API令牌),並推而廣之,寫入境界值。我該如何去做?

我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請求境界,但我一直被拋出此錯誤

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請求

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,所以typechecker不認爲這是一個有效的輸入您get方法。您需要明確聲明符合性;只需要所需的方法是不夠的:

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

實際上,在我的Login類中,POST響應會爲我提供我正在查找的值。有沒有辦法讓我直接將它映射到Particulars類中的變量? (我已經更新了我的答案以顯示此內容) – noobdev