Asignación a Swift Problema de object que muestra nil con Alamofire ObjectMapper

Soy nuevo en el entorno de desarrollo iOS y Swift. Intentaba usar Alamofire para extraer JSON y AlamofireObjectMapper para asignar las collections recuperadas de JSON a mi Objeto Swift.

El problema es que puedo search la request JSON mediante Alamofire y se muestra el conteo, pero la parte de mapeo parece mostrar cero. Es algo que me habían perdido. Aprecie la ayuda.

Clase del model

import UIKit import CoreLocation import ObjectMapper class BranchObjectMapper : Mappable { // MARK: Properties var id: Int? var cityId: Int? var areaId: Int? var name: String? var nameAr: String? var branchAddr: String? var branchAddr2: String? var location: CLLocation? requinetworking init?(_ map: Map) { mapping(map) } func mapping(map: Map) { id <- map["id"] cityId <- map["cityId"] areaId <- map["areaId"] name <- map["name"] nameAr <- map["nameAr"] branchAddr <- map["branchAddr"] branchAddr2 <- map["branchAddr2"] location <- map["location"] } } 

Solicitar parte en viewDidLoad()

  Alamofire.request(.GET, UrlEndpoints.branchUrl()).responseArray { (response: Response<[BranchObjectMapper], NSError>) in self.branchList = response.result.value! print(self.branchList.count) // count is correct for branch in self.branchList { print(branch.id) // prints nil print(branch.id) // prints nil } } 

Gracias por adelantado

La respuesta JSON completa se ve a continuación. Han construido solo los necesarios en el model.

[{"Id": "16", "areaId": "17", "name": "Al Aqiq", "cityId": 4 "," Zip ":" "," nameAr ":" \ u0637 \ u0631 \ u064a \ u0642 \ u0627 \ u0644 \ u0645 "," twigAddr ":" testing "," twigAddr2 ":" testing "Latitud": "24.60425", "Longitud": "46.629631", "cityId": "1"} ]

Creo que te estás perdiendo la documentation correcta de ObjectMapper lib. Comtesting este Github ObjectMapper .

Estos son los types admitidos por la lib:

  • Int
  • Bool
  • Double
  • Float
  • String
  • RawRepresentable (Enums)
  • Array<AnyObject>
  • Dictionary<String, AnyObject>
  • Object<T: Mappable>
  • Array<T: Mappable>
  • Array<Array<T: Mappable>>
  • Set<T: Mappable>
  • Dictionary<String, T: Mappable>
  • Dictionary<String, Array<T:Mappable>>
  • Opcionales de todo lo anterior
  • Implicitly Unwrapped Optionals de lo anterior

Por lo tanto, si está intentando asignar un object que no está en esa list, el resultado es nil .

En su caso es var location: CLLocation? .

Si necesita asignar el object CLLocation, una forma es mapear un CustomCLLocation con todas las properties de la siguiente manera: JSON (no conozco su Json, este es un ejemplo)

 "location":{ "long": 43.666, "lat": 73.4 } 

Swift: cree otro file "CustomCLLocation", por ejemplo, como el primero, pero para mapear CLLocation con su Json

 var latitude: Double? var longitude: Double? requinetworking init?(_ map: Map) { mapping(map) } func mapping(map: Map) { longitude <- map["long"] latitude <- map["lat"] } 

y ahora, puede asignar un object CLLocation "falso": var location: CustomCLLocation?

Entonces, si quieres una CLLocal realmente. simplemente cree una extensión simplemente como esa (agréguela en el file CustomCLLocation):

 extension CLLocation { public class func createFromCustomCLLocation(custom: CustomCLLocation) -> CLLocation { return self.init(custom.latitude,custom.longitude) } } 

Usando la conversión:

 var locationCLL = CLLocation.createFromCustomCLLocation(location) // now is a CLLocation 

Editado: request Alamofire

Tengo la misma request en mi aplicación con la última versión de AlamofireObjectMapper para iOS 8.0 +

 Alamofire.request(.GET, UrlEndpoints.branchUrl()).responseArray { (response: [BranchObjectMapper]?, error : ErrorType?) in if(error != nil) { print(error) }else{ print("data downloaded") if let response = response { branchList(response) for branch in self.branchList { print(branch.id) print(branch.name) } } } }