Быстрое сопоставление данных с [String: Any] - PullRequest
0 голосов
/ 02 июля 2018

Я хотел бы преобразовать тип данных в [String: Any], но JSONSerialization говорит мне:

Невозможно принудительно развернуть значение необязательного типа «Данные»

var json: [String: Any]
            do{
                let jsonEncoder = JSONEncoder()
                let encodedJson = try jsonEncoder.encode(message)
                json = try JSONSerialization.data(withJSONObject: encodedJson!, options: []) as? [String : Any]
            } catch {
                log.error(error.localizedDescription)
            }
return .requestParameters(parameters: json, encoding: JSONEncoding.default)

Если я уберу знак "!" от encodedJson, то сообщение происходит:

Значение необязательного типа '[String: Any]?' не развернутый; ты хотел использовать '!' или '?'?

Если я уберу '?' из любого ?, то я использую JSON без инициализации, конечно

Не знал, как это исправить (новый быстрый кодер)

Надеюсь, это не глупый вопрос

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Вы используете неправильный API, data(withJSONObject создает Data из массива или словаря

Тебе нужно наоборот. Для решения проблемы удалите восклицательный знак после encodedJson

json = try JSONSerialization.jsonObject(with: encodedJson) as? [String : Any]

и объявить json необязательным

var json: [String: Any]?

Или - если JSON гарантированно всегда будет словарем - принудительно разверните объект

json = try JSONSerialization.jsonObject(with: encodedJson) as! [String : Any]
0 голосов
/ 02 июля 2018

В этом нет необходимости, поскольку у вас уже есть данные в encodedJson

json = try JSONSerialization.data(withJSONObject: encodedJson!, options: []) as? [String : Any]

, поскольку withJSONObject ожидает, что объект не Data, также приведение к [String:Any] завершится неудачей

...