2017-01-23 9 views
0

У меня есть модель, которая есть эти два поляНевозможно разобрать под двойной строки с Mapper Object

var latitude: String? 
var longitude: String? 

Я пытаюсь разобрать модель. Все правильно анализируется, но только эти два поля никогда не разбираются.

Вот полная модель

import ObjectMapper 
class BarberLoginModel: Mappable { 
var id: Int? 
var barberShopId: Int = 0 
var firstName = "" 
var lastName = "" 
var mobileNo = "" 
var userName = "" 
var email = "" 
var imgPath = "" 
var shopName = "" 
var address = "" 
var street = "" 
var area = "" 
var emirates = "" 
var latitude: String? 
var longitude: String? 
var Services: [ServiceModel]? 
var Stylist: StylistArrayModel? 
var Availability: [AvailabilityModel]? 
var Facilities: [FacilitiesModel]? 

required init?(map: Map) { 

} 

func mapping(map: Map) { 
    id <- map["id"] 
    barberShopId <- map["barberShopId"] 
    firstName <- map["firstName"] 
    lastName <- map["lastName"] 
    mobileNo <- map["mobileNo"] 
    userName <- map["userName"] 
    email <- map["email"] 
    imgPath <- map["imgPath"] 
    shopName <- map["shopName"] 
    address <- map["address"] 
    street <- map["street"] 
    area <- map["area"] 
    emirates <- map["emirates"] 
    latitude <- map["latitude"] 
    longitude <- map["longitude"] 
    Services <- map["Services"] 
    Stylist <- map["Stylist"] 
    Availability <- map["Availability"] 
    Facilities <- map["Facilities"] 
} 
} 

Примечание: При изменении типа данных DOUBLE? Он работает, но он добавляет дополнительные цифры из-за двойного.

Left side is my parsed model and right side is raw view of data came from server

Ссылка на JSON:http://shaveme.stagingserver-me.com/api/ShopUserMaster?ln=en&t=1F10D5778C66A751766E8532EEAA0E1B&uid=21

+0

Как выглядят исходные данные (Json?)? – ptoinson

+0

@ptoinson Посмотрите на правую сторону изображения. Это исходные данные –

+0

@NoorAli Вы должны разместить свой JSON вместо изображения –

ответ

1

Это довольно трудно отлаживать, не имея доступа к фактическим данным. Я собрал немного теста ниже. Если вы запустите его, вы узнаете, что второй XCTAssertEqual в каждом тесте терпит неудачу, потому что исходные данные JSON не имеют котировок вокруг значения 26.432. Я предполагаю, что ваши данные являются числом, а не строкой, и поэтому не будут корректно отрисовываться.

import XCTest 
import ObjectMapper 

class Test : Mappable { 
    var latitude: String? 
    var longitude: String? 

    required init?(map: Map) { 

    } 

    func mapping(map: Map) { 
     latitude <- map["latitude"] 
     longitude <- map["longitude"] 
    } 
} 

class ObjectMapper_RndTests: XCTestCase { 

    override func setUp() { 
     super.setUp() 
    } 

    override func tearDown() { 
     super.tearDown() 
    } 

    func testExample() { 
     let json = "{\"longitude\": 26.432, \"latitude\":\"82.123\"}" 
     let test = Test(JSONString: json); 

     guard let t = test else { 
      return 
     } 

     XCTAssertEqual(t.latitude, "82.123") 
     XCTAssertEqual(t.longitude, "26.432") 
    } 

    func testExampleTwo() { 
     let json = [ "longitude": 26.432, "latitude": "82.123" ] as [String : Any] 
     let test = Test(JSON: json); 

     guard let t = test else { 
      return 
     } 

     XCTAssertEqual(t.latitude, "82.123") 
     XCTAssertEqual(t.longitude, "26.432") 
    } 
} 

Решение, если вы не можете изменить источник данных в строку, чтобы использовать преобразование. Более подробная информация на сайте ObjectMapper https://github.com/Hearst-DD/ObjectMapper. Похоже на это.

class Test : Mappable { 
    var latitude: String? 
    var longitude: String? 

    required init?(map: Map) { 

    } 

    func mapping(map: Map) { 

     let transform = TransformOf<String, Double>(fromJSON: { (value: Double?) -> String? in 

      if let v = value { 
       NSLog("from json value: " + String(v)) 
       return String(v) 
      } 
      NSLog("from json value: null") 
      return nil 
     }, toJSON: { (value: String?) -> Double? in 
      // transform value from Double? to String? 
      if let value = value { 
       return Double(value) 
      } 
      return nil 
     }) 

     latitude <- (map["latitude"], transform) 
     longitude <- (map["longitude"], transform) 
    } 
} 
+0

Я добавлю все данные в текстовом формате. –

+0

Прохладный. Дайте мне знать, если это сработает. – ptoinson

+0

Путаница была двойной кавычки. Поскольку у меня не было доступа к серверу, и когда я напечатал ответ от сервера, он показал мне двойные кавычки вокруг данных. Поэтому, хотя это может быть строка. –

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

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