Быстрое сопоставление данных с [String: Any]

Я хотел бы преобразовать тип данных в [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 без его инициализации, конечно

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

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


person rocklyve    schedule 02.07.2018    source источник
comment
поделитесь, пожалуйста, еще кодом, особенно каково значение переменной сообщения?   -  person Nasir    schedule 02.07.2018


Ответы (2)


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

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

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

person Sh_Khan    schedule 02.07.2018
comment
хорошо, спасибо :), но как мне преобразовать мой encodedJson в [String: Any]? - person rocklyve; 02.07.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]
person vadian    schedule 02.07.2018