Как я могу сделать отображение массива с помощью objectmapper?

у меня есть модель ответа, которая выглядит так:

class ResponseModel: Mappable {

    var data: T?
    var code: Int = 0

    required init?(map: Map) {}

    func mapping(map: Map) {
        data <- map["data"]
        code <- map["code"]
    }
}

если JSON-data не является массивом, он работает:

{"code":0,"data":{"id":"2","name":"XXX"}}

но если это массив, он не работает

{"code":0,"data":[{"id":"2","name":"XXX"},{"id":"3","name":"YYY"}]}

мой код отображения;

let apiResponse = Mapper<ResponseModel>().map(JSONObject: response.result.value)

подробнее; Я попробовал этот код, используя эту статью:http://oramind.com/rest-client-in-swift-with-promises/

4 ответов


вам нужно изменить объявление данных на массив, так как это так в JSON:

var data: [T]? 

вам нужно использовать mapArray вместо map :

let apiResponse = Mapper<ResponseModel>().mapArray(JSONObject: response.result.value)

любой, кто использует SwiftyJSON, и если вы хотите объект из JSON напрямую, не имея родительского класса, например, вы хотите "данные" от него. Вы можете сделать что-то вроде этого,

if let data = response.result.value {
   let json = JSON(data)
   let dataResponse = json["data"].object
   let responseObject = Mapper<DataClassName>().mapArray(JSONObject: dataResponse)
}

вернуться [DataClassName]? в качестве ответа.


let apiResponse = Mapper<ResponseModel>().mapArray(JSONObject: response.result.value)

для меня