Отображение данных объекта json в 2 отдельных массива с помощью AlamofireObjectMapper

Jumpman987 спросил: 27 ноября 2017 в 06:22 в: ios

В настоящее время я пытаюсь реализовать сопоставление с моими моделями, и текущий способ, которым я это делаю, не дает никакого результата. У меня есть класс MediaLibrary, который содержит 2 массива, 'exercMedia' и 'stretchMedia', которые оба содержат массив объектов 'Media'. Я выбрал библиотеку ObjectMapper / AlamofireObjectMapper для сопоставления данных с моими моделями.

import ObjectMapperclass MediaLibrary: Mappable {    var exerciseMedia: [Media]?
    var stretchMedia: [Media]?    required init?(map: Map) {
        mapping(map: map)
    }    func mapping(map: Map) {
        exerciseMedia <- map["ExerciseMedia"]
        stretchMedia  <- map["StretchMedia"]
    }
}

Вот объект Media, который будет составлять объекты, заполняющие оба моих массива в классе MediaLibrary.

import ObjectMapperstruct Media: Mappable {    var _id: String?
    var name: String?
    var desc: String?
    var imageURI: String?
    var videoURI: String?
    var trainerID: String?
    var isShoulders : Bool?
    var isNeck : Bool?
    var isLegs : Bool?
    var isHands : Bool?
    var isChest : Bool?
    var isCalves : Bool?
    var isButt : Bool?
    var isBack : Bool?
    var isArms : Bool?
    var isCore : Bool?
    var isFullBody : Bool?
    var isLowerBody : Bool?
    var isUpperBody : Bool?
    var isExercise : Bool?
    var isStretch : Bool?
    var equipmentNeeded : String?    init?(map: Map){ }    mutating func mapping(map: Map) {        _id             <- map["_id"]
        name            <- map["name"]
        desc            <- map["desc"]
        imageURI        <- map["imageURI"]
        videoURI        <- map["videoURI"]
        trainerID       <- map["trainerID"]
        isShoulders     <- map["isShoulders"]
        isNeck          <- map["isNeck"]
        isLegs          <- map["isLegs"]
        isHands         <- map["isHands"]
        isChest         <- map["isChest"]
        isCalves        <- map["isCalves"]
        isButt          <- map["isButt"]
        isBack          <- map["isBack"]
        isArms          <- map["isArms"]
        isCore          <- map["isCore"]
        isFullBody      <- map["isFullBody"]
        isLowerBody     <- map["isLowerBody"]
        isUpperBody     <- map["isUpperBody"]
        isExercise      <- map["isExercise"]
        isStretch       <- map["isStretch"]
        equipmentNeeded <- map["equipmentNeeded"]
    }
}

Теперь вот пример json, который я пытаюсь отобразить. Обратите внимание, что в моей модели есть как imageURI, так и videoURI, так как есть два типа объектов Media, но, поскольку они являются дополнительными, они могут объяснить это.

{
    "StretchMedia": [
        {
            "_id": "5a380db7ee292409b4f44980",
            "name": "somephoto",
            "desc": "some description",
            "imageURI": "https://videofitapptestbucket.s3.us-west-2.amazonaws.com/100006166323",
            "trainerID": "5a32f62a28ce4acbc5fbbb4b",
            "__v": 0,
            "createdAt": "2017-12-18T18:49:27.009Z",
            "isShoulders": false,
            "isNeck": false,
            "isLegs": false,
            "isHands": false,
            "isChest": false,
            "isCalves": false,
            "isButt": false,
            "isBack": false,
            "isArms": false,
            "isCore": false,
            "isFullBody": false,
            "isLowerBody": false,
            "isUpperBody": false,
            "isExercise": false,
            "isStretch": true,
            "equipmentNeeded": "none"
        },
        {
            "_id": "5a380dfa089b2d09dcfa92db",
            "name": "somephoto",
            "desc": "some description",
            "videoURI": "https://videofitapptestbucket.s3.us-west-2.amazonaws.com/100002098677",
            "trainerID": "5a32f62a28ce4acbc5fbbb4b",
            "__v": 0,
            "createdAt": "2017-12-18T18:50:34.277Z",
            "isShoulders": false,
            "isNeck": false,
            "isLegs": false,
            "isHands": false,
            "isChest": false,
            "isCalves": false,
            "isButt": false,
            "isBack": false,
            "isArms": false,
            "isCore": false,
            "isFullBody": false,
            "isLowerBody": false,
            "isUpperBody": false,
            "isExercise": false,
            "isStretch": true,
            "equipmentNeeded": "none"
        }
    ],
    "ExerciseMedia": [
        {
            "_id": "5a345a356ec5fc0032651611",
            "name": "Juan",
            "desc": "pic of some Spanish guy",
            "imageURI": "https://videofitapptestbucket.s3.us-west-2.amazonaws.com/10000998839",
            "trainerID": "5a32f62a28ce4acbc5fbbb4b",
            "isStretchCore": false,
            "isExerciseCore": false,
            "__v": 0,
            "createdAt": "2017-12-15T23:26:45.461Z",
            "isShoulders": false,
            "isNeck": false,
            "isLegs": false,
            "isHands": false,
            "isChest": false,
            "isCalves": false,
            "isButt": false,
            "isBack": false,
            "isArms": false,
            "isCore": false,
            "isFullBody": true,
            "isLowerBody": false,
            "isUpperBody": false,
            "isExercise": true,
            "isStretch": false,
            "equipmentNeeded": "Dumbbells"
        }
    ],
}

Проблема I ' Я имею в виду, как заполнить 2 массива в моем классе MediaLibrary содержимым ExerciseMedia и StretchMedia в соответствующие массивы. Я создал функцию, которая делает запрос (тело нуждается только в идентификаторе тренера) к маршруту, который содержит JSON, который вы только что видели. Пока я выложу свой код.

import AlamofireObjectMappervar mediaLibrary: MediaLibrary?func setTrainerMediaLibrary(trainerID: String) {
        let body: [String: Any] = [
            "trainerID": trainerID
        ]        Alamofire.request(TRAINER_MEDIA_ALL, method: .post, parameters: body, encoding: JSONEncoding.default, headers: HEADER).responseObject { (response: DataResponse<MediaLibrary>) in
            if response.result.error == nil {
                self.mediaLibrary = Mapper<MediaLibrary>().map(JSONObject: response.result.value)
            } else {
                print("Could not map JSON data to Media Library model")
                debugPrint(response.result.error as Any)
            }
        }
    }

Объект MediaLibrary возвращает nil, поэтому что-то не так. Я думаю, что поскольку MediaLibrary имеет отображение для "ExerciseMedia" и "StretchMedia", все, что мне нужно сделать, это использовать MediaLibrary в запросе, и функция отображения автоматически обработает 2 медиа-ключа, которые вы видите в JSON. Я мог бы поступить об этом совершенно неправильно, но я знаю, что я близко, любая помощь будет оценена.


0 ответов