Массив, который выглядит как словарь? - PullRequest
0 голосов
/ 04 октября 2019

Итак, у меня есть список с несколькими элементами, к которым я хотел бы получить доступ в своем проекте. Plist - это массив элементов, которые в свою очередь представляют собой словари с типом string: string (Item1 -> "name": "somename", "description": "somedescription")

Я хотел бы получить доступтолько значение имени моих предметов и отображение в массиве. Мне удалось получить все пары ключ-значение в моем списке с помощью следующего кода:

let path = Bundle.main.path(forResource: "PlistName", ofType: "plist")
let dict = NSArray.init(contentsOf: URL.init(fileURLWithPath: path!)) as! [[String:String]]

с помощью print (dict). Я могу вывести все на консоль, как я и сказал. Мне нужны только имена элементов в массиве.

Больше всего меня смущает тот факт, что dict равен NSArray типа [[String: String]]. Я не понимаю, как массив может быть типа String: String. Это похоже на словарь для меня. Я попытался изменить NSArray на NSDictionary, но это дает мне ошибку, говорящую

"Приведение из" NSDictionary? "на несвязанный тип '[[String: String]]' всегда происходит сбой "

Я также не могу использовать ни ключ, ни значение dict.

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Вы можете извлечь значения для определенного ключа, используя функции map или compactMap, в данном случае я использую compactMap, если в одном из словарей нет имени

let arrayOfDictionaries = [["name": "a", "some": "x"],
                           ["name": "b", "some": "y"],
                           ["some": "z"],
                           ["name": "c"]]

let names = arrayOfDictionaries.compactMap {$0["name"]}
0 голосов
/ 04 октября 2019
let oneDict = dict[0]

возвращает один словарь, и если вам действительно нужен массив из одного словаря, сделайте следующее:

let array = [oneDict]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...