Swift: Как мне создать массив словарей, где каждый словарь содержит массив внутри них?

Я пытаюсь загрузить некоторые данные из моего plist в массив. Объявляя массив, я сделал что-то вроде этого

var natureList : [Dictionary] = [] as! [Dictionary]

Я получаю эту ошибку

Вот мой файл plist

Итак, как мне объявить массив для загрузки этих данных из моего plist.? Я знаю, это просто, но эта маленькая штука ест мою голову. Любая помощь приветствуется.

2 ответа

Решение

Это должно быть объявлено следующим образом:

var natureList = [[String: Any]]()

или, как советовал @ Leo Dabus (спасибо ему):

var natureList: [[String: Any]] = []

Значит это natureList это массив словарей строк в качестве ключей и любых в качестве значений.

Если вы хотите объявить это, используя Dictionary -Что такое uanessacry-, вы также можете сделать это так:

var natureList = [Dictionary<String, Any>]()

У Ахмада Ф. есть правильный ответ, но на всякий случай вам (или будущему читателю) нужно быть более конкретным в какой-то момент здесь, как это разбить на супер специфический тип…

Большинство внутренних элементов в списке (Сводка: 1-й цветок и т. Д.) Все [String: String] потому что ключ является строкой, и поэтому является связанным значением.

Все эти внутренние словари хранятся в массивах, поэтому мы добавляем дополнительный набор скобок вокруг нашего предыдущего типа: [[String : String]],

При повышении уровня все эти массивы находятся в словаре, что означает, что мы добавляем тип ключа, двоеточие и скобки: [String: [[String : String]]]

Словари из предыдущего шага все содержатся в массиве, что означает, что мы добавляем еще один набор скобок снаружи, оставляя нас с: [[String: [[String : String]]]],

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

Другие вопросы по тегам