Работа с Unsplash.Невозможно присвоить значение типа Array <_> типу Any? - PullRequest
0 голосов
/ 20 января 2019

В настоящее время я работаю над обработкой информации, полученной из файла JSON, и, поскольку она организована в несколько уровней, мне нужно иметь возможность преобразовывать не только файл, но и все его содержимое в правильный файл. типы. У меня есть некоторые проблемы с этим, и я не могу найти что-то для Swift по этому вопросу.

До сих пор я пробовал методы, которые очевидны в коде ниже. Я не мог найти много информации об альтернативных методах, чтобы сделать это, и я все еще новичок в программировании, поэтому я не смог сделать много.

URLSession.shared.dataTask(with: urlRequest) { data, response, error in
    if let data = data {
        print("Clear")
        let returnData = String(data: data, encoding: .utf8)

        do {
            let image = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
            print(image!["results"])
            var imgl2 = image!["results"]
            imgl2 = imgl2 as! Array
            //imgl2 = imgl2![0]
              //print(imgl2!["color"])
//                var imgl3 = imgl2!["results"]
//                var imgl4 = imgl3!["results"]
//                var imgl5 = imgl4!["results"]
//                var imgl6 = imgl5!["results"]
        } catch let error {
            print(error)
        }
    }
    }.resume()

Что должно произойти, это то, что я должен быть в состоянии преобразовать содержимое JSON в правильный тип файлов. В какой-то степени это работает, и я могу получить результаты первого уровня. Тем не менее, частично через процесс в imgl2 = imgl2, как! Массив, я не могу преобразовать его в массив. Вместо этого я получаю сообщение об ошибке (Невозможно присвоить значение типа «Массив <_>» типу «Любой?»). Я бы очень хотел иметь возможность использовать вложенный массив, но не могу. После этого будет несколько дополнительных уровней контента, которые мне нужно будет отсортировать таким образом. Я пытался просмотреть документацию по API, но я не понимаю, как они это написали (кстати, это Unsplash), и поэтому я пробовал этот метод. Как именно я поступил бы по этому поводу?

(Для получения дополнительной информации я пытаюсь извлечь первое изображение в результатах, чтобы затем я мог редактировать его программным способом. Мне нужен URL-адрес, заключенный в ответ на поисковый запрос, но способ, которым документация сформулированный текст достаточно неясен, и решения этой проблемы настолько скудны, что мне пришлось использовать метод проб и ошибок, чтобы добраться до того места, где я нахожусь. Любое понимание того, как этого добиться, будет с благодарностью.)

1 Ответ

0 голосов
/ 20 января 2019

Невозможно присвоить значение типа 'Array <_>' типу 'Any?

Ошибка говорит вам, что imgl2 имеет тип Any?, но выпытаясь присвоить ему значение типа Array.Swift не позволяет изменять тип переменной после ее инициализации.Чтобы избежать этой ошибки, можно назначить imgl2 as! Array новой переменной.

Я также предлагаю вам взглянуть на протокол Decodable для создания моделей, соответствующих структуре JSON.

...