Swift: инициализация модели с помощью объекта json и начальных значений в ObjectMapper - PullRequest
2 голосов
/ 16 июня 2020

Я пытаюсь получить данные с сервера с помощью Alamofire и проанализировать ответ с помощью ObjectMapper. На данный момент моя проблема в том, как инициализировать модель с помощью json Object и некоторых начальных значений. Разбор только ответа json с помощью ObjectMapper хорошо работает в следующем коде:

Alamofire.request(url, method: .post, parameters: parameters, encoding: .prettyPrinted, headers: header).responseJSON { (response) in
    switch response.result {
    case .success(let json):
        guard let jsonObj = json as? [String: Any] else {
            promise.reject(AFError.responseValidationFailed(reason: .dataFileNil))
        }

        let list = jsonObj["data"] as? [[String: Any]]
        var projects: [Project] = []
        for item in list {
            if let project = Project(JSON: item) {
                projects.append(project)
            }
        }
        promise.fulfill(projects)
    case .failure(let error):
        promise.reject(error)
    }
}

А это Project.swift:

import UIKit
import ObjectMapper

class Project: Mappable {

    var id: String?
    var projectName: String?
    var projectDescription: String?
    var companyId: String?
    var isService: Bool = false

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

    func mapping(map: Map) {
        id                          <- map["_id"]
        projectName                 <- map["projectName"]
        projectDescription          <- map["projectDescription"]
        if isService {
            companyId                   <- map["serviceId"]
        } else {
            companyId                   <- map["companyId"]
        }
    }
}

Я надеюсь установить isService флаг перед вызовом project = Project (JSON: item) . Примерно так:

let project = Project(JSON: item, isService: true)
or 
let project = Project(JSON: item, isService: false)

Кто-нибудь может мне помочь?

...