2016-10-01 40 views
0

映射我有一个通用的功能:通用功能JSON对象与ObjectMapper

func toObjectMapper<T: Mappable>(mapper: T, success: (result: Mappable) -> Void, failure: (error: NSError) -> Void){ 
     let alomofireApiRequest = AlamofireApiRequest(apiRequest: self) 
     Alamofire.request(alomofireApiRequest) 
      .responseObject { (response: Response<T, NSError>) in 
       guard let value = response.result.value else { 
        failure(error: response.result.error!) 
        return 
       } 
       success(result: value) 
     } 

    } 

而且我想这样称呼它:

public func login(login: String, password: String) -> UserResponse { 
     let params = ["email":login, "password":password] 

     let request = ApiRequest(method: .POST, path: "login", parameters: params) 

     request.toObjectMapper(UserResponse.self, success: { result in 
       print(result) 

      }, failure: { error in 
       print(error.description) 
     }) 
    } 

但我总是得到这样的错误:

​​

这是我的userResponse:

import Foundation 
import ObjectMapper 
import RealmSwift 

public class UserResponse: Object, Mappable { 
    dynamic var id = 0 
    dynamic var name = "" 
    dynamic var address = "" 
    dynamic var zipcode = "" 
    dynamic var city = "" 
    dynamic var country = "" 
    dynamic var vat = "" 
    dynamic var email = "" 
    dynamic var created_at = NSDate() 
    dynamic var updated_at = NSDate() 

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

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

    public func mapping(map: Map) { 
     id <- map["id"] 
     name <- map["name"] 
     address <- map["address"] 
     zipcode <- map["zipcode"] 
     city <- map["city"] 
     country <- map["country"] 
     vat <- map["vat"] 
     email <- map["email"] 
     created_at <- map["created_at"] 
     updated_at <- map["updated_at"] 


    } 
} 

任何帮助?

回答

0

我认为问题在于你试图使用UserResponse作为实例化对象,但使用UserResponse.self只是类类型。

一个解决方案是让UserResonse单身(或转给“toObjectMapper”作为一个参数之前只是实例化一个实例)

我不知道如果这个代码具体工作,但它沿着这些路线是: -

public class UserResponse: Object, Mappable { 
dynamic var id = 0 
dynamic var name = "" 
dynamic var address = "" 
dynamic var zipcode = "" 
dynamic var city = "" 
dynamic var country = "" 
dynamic var vat = "" 
dynamic var email = "" 
dynamic var created_at = NSDate() 
dynamic var updated_at = NSDate() 

static let shared = UserResponse() //singleton instantiation 

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

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

public func mapping(map: Map) { 
    id <- map["id"] 
    name <- map["name"] 
    address <- map["address"] 
    zipcode <- map["zipcode"] 
    city <- map["city"] 
    country <- map["country"] 
    vat <- map["vat"] 
    email <- map["email"] 
    created_at <- map["created_at"] 
    updated_at <- map["updated_at"] 


} 
} 

,然后在你的函数调用

public func login(login: String, password: String) -> UserResponse { 
    let params = ["email":login, "password":password] 

    let request = ApiRequest(method: .POST, path: "login", parameters: params) 

    request.toObjectMapper(UserResponse.shared, success: { result in 
      print(result) 

     }, failure: { error in 
      print(error.description) 
    }) 
} 
+0

我做了一个快速测试,它关掉了报警。所以你需要实例化一个UserResponse的实例。以上只是我如何做的一个粗略的例子。 –