Ios 无法使用对象映射器分析双字符串

Ios 无法使用对象映射器分析双字符串,ios,swift,alamofire,objectmapper,Ios,Swift,Alamofire,Objectmapper,我有一个有这两个字段的模型 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 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"]
}
}
导入对象映射器
类BarberLoginModel:可映射{
变量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服务:[ServiceModel]?
var造型师:造型师?
变量可用性:[AvailabilityModel]?
var贷款:[设施模型]?
必需的初始化?(映射:映射){
}
func映射(映射:映射){

id如果无法访问实际数据,则很难进行调试。我在下面做了一个小测试。如果运行它,您将知道在每个测试中,第二个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")
    }
}
导入XCTest
导入对象映射器
类测试:可映射{
变量纬度:字符串?
变量经度:字符串?
必需的初始化?(映射:映射){
}
func映射(映射:映射){
纬度双倍?英寸
//将值从双精度?转换为字符串?
如果let value=value{
返回双精度(值)
}
归零
})

纬度或者,你可以手动操作。代码更干净、更短

class BarberLoginModel: Mappable {

    var latitude: Double?
    var longitude: Double?

    required convenience init?(map: Map) {
        self.init()
    }

    func mapping(map: Map) {
        var latitude: String?
        var  longitude: String?
        latitude <- map["latitude"]
        longitude <- map["longitude"]

        if let latitude = latitude {
            self.latitude = Double(string: latitude)
        }
        if let longitude = longitude {
            self.longitude = Double(string: longitude)
        }
    }
}
类BarberLoginModel:可映射{
纬度:双倍?
两倍?
所需便利初始化?(映射:映射){
self.init()
}
func映射(映射:映射){
变量纬度:字符串?
变量经度:字符串?

纬度您的源数据(Json)是什么看起来像吗?@ptoinson看图片的右边。这是来源data@NoorAli您应该发布JSON,而不是Image@UmairAfzalJson太大了,有太多不相关的东西。不管怎么说,这是Json的链接:混淆是双引号。因为我没有访问服务器的权限,当我打印服务器的响应时,它显示了我的权限在数据周围加上双引号。所以我认为它可能是字符串。
class BarberLoginModel: Mappable {

    var latitude: Double?
    var longitude: Double?

    required convenience init?(map: Map) {
        self.init()
    }

    func mapping(map: Map) {
        var latitude: String?
        var  longitude: String?
        latitude <- map["latitude"]
        longitude <- map["longitude"]

        if let latitude = latitude {
            self.latitude = Double(string: latitude)
        }
        if let longitude = longitude {
            self.longitude = Double(string: longitude)
        }
    }
}