Расширяемая ошибка JSONSerialization для пользовательского объекта alamofire - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть пользовательский APIClient, использующий бета-версию alamofire5, которая соответствует протоколу Codable для запроса. Я пытаюсь отправить пользовательский объект через httpBody (post) и получаю эту ошибку:

Недопустимый тип в записи JSON (_SwiftValue)

Это объект, который я пытаюсь отправить:

struct Complex: Codable {
    var id: String
    var name: String
    var address: String
    var zipcode: String
    var amenities: [String]
    var schedules: [ComplexSchedules]

    init(id: String, name: String, address: String, zipcode: String, amenities: [String], schedules: [ComplexSchedules]) {
        self.id = id
        self.name = name
        self.address = address
        self.zipcode = zipcode
        self.amenities = amenities
        self.schedules = schedules
    }

    enum CodingKeys: String, CodingKey {
        case id = "id"
        case name = "name"
        case address = "address"
        case zipcode = "zipcode"
        case amenities = "amenities"
        case schedules = "schedules"
    }

    struct TimeRange: Codable {
        var from: String
        var to: String

        init(from: String, to: String) {
            self.from = from
            self.to = to
        }

        enum CodingKeys: String, CodingKey {
            case from = "from"
            case to = "to"
        }
    }

    struct ComplexSchedules: Codable {
        var day: String
        var timeRanges: [TimeRange]

        init(day: String, timeRanges: [TimeRange]) {
            self.day = day
            self.timeRanges = timeRanges
        }

        enum CodingKeys: String, CodingKey {
            case day = "day"
            case timeRanges = "time_ranges"
        }
    }
}

Сбой при вызове этого метода:

urlRequest.httpBody = попробуйте JSONSerialization.data (withJSONObject: complex, опции: [])

Есть мысли?

1 Ответ

0 голосов
/ 06 ноября 2018

Вам может понадобиться

do {

     let data = try JSONEncoder().encode(complex)
     urlRequest.httpBody = data
}
catch {

   print(error)
}

как Codable используется, чтобы иметь возможность использовать JSONDecoder и JSONEncoder не использовать с JSONSerialization, который ожидает нестандартный объект, такой как raw String/Array/Dictionary

...