Как передать dictionary в TableView

dictionary
tableview

#21

Лучшее решение тогда похоже Array(dictionary)
У вас получится Array(dictionary)[index].key - ключи
Array(dictionary)[index].value - значения.
Правда, тут вам лучше будет отсортировать словарь по чему-либо, чтобы избежать путаницы.


#22

а что в данном случае означает [index]?


#23

Ответ


#24

насчет ссылки понятно, но я имел в виду данный конкретный случай. Например, преобразовываем словарь в массив:

var array = Array(dictionary)

Этот массив имеет следующую структуру:

[(key: String, value: [String])]

Т.е. получается, что словарь завернут в тюпл и вставлен в массив.

И как теперь достать те же ключи? Если использовать ваш пример, то что нужно вставить в квадратные скобки, там где индекс?

array[index].key


#25

Maxim, это уже несмешно! Тут большинство новичков, как и я, и форум для того и нужен, чтобы разбирать сложные для кого-то вопросы и помогать начинающим. Но просить прочитать учебник другого за себя - это слишком.

это полностью взаимоисключающие фразы, которые озночают, что вы, либо не читали, либо совершенно невнимательны! Там полностью есть ответ на все ваши вопросы по массивам, причём не для профи, а для обычных новичков написано понятным языком: во-первых в самом начале, а во-вторых в разделе Доступ и изменение массива. Ещё раз честно и с желанием помочь - с такой внимательностью, вам просто надо сесть за плейграунд и перечитать весь учебник! Один, два, сколько понадобится раз, чтобы самому себе ответить - понял раздел или нет. В учебнике только БАЗА! И её непонимание - катастрофично!

Удачи!


#26

индекс извлекаемого элемента


#27

ODIN я ценю вашу помощь, но при всем уважении мы похоже друг друга не поняли.

Если указывается индекс в выражении, например:

array[0].key

то возвращается только один ключ. А речь идет о том, чтобы получить все ключи.


#28

речь идёт о том, что всё же учебник вам не помешает :slight_smile:

  1. количество элементов в массиве вычисляется свойством .count

  2. массив можно перебрать в цикле, получив каждый элемент (ещё можно использовать в цикле свойство .enumerated() - изучите, тоже часто полезно)

  3. любой ваш контроллер - это класс. У классов могут быть методы (функции) и свойства (переменные), или классы могут быть подписаны на протоколы, например. Так вот при использовании таблиц в той или иной мере участвует протокол UITableViewDataSource у которого есть 2 метода:
    один опередялет количество строк в одной секции вашей таблице (обычно для формирования и хранения данных для таблиц используют массивы, но это по желанию и может быть вообще любая форма)

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return array.count
    }

другой формирует ячейку(строку) для всех элементов (строк) вашей таблицы, количество которых вычесленно предыдущим методом

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
    return cell
}

так вот получается что этот (второй) метод вызывается столько раз, сколько возвращено в первом (это int). И в нём можно обратиться к каждому элементу массива используя вычисляемые свойства второго метода - это indexPath
"IndexPath represents the path to a specific node in a tree of nested array collections.
_ Each index in an index path represents the index into an array of children from one node in the tree to another, deeper, node."_ описание из xCode - переводчик в помощь;
у него есть также вычисляемое свойство .row (строка), которое как раз является Int и меняется от 0 до array.count или любого Int, возвращённого в первом методе.

Подробнее некуда.


#29

спасибо за “курс молодого бойца”)) это все понятно, но тем не менее не отвечает на вопросы, которые возникают по ходу.

В любом случае спасибо за помощь, вопрос уже решен. Даже написал небольшую методичку для таких как я, ищущих ответы на вопросы.


#30

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


#31

Особой разницы нету, просто кому как удобнее.
Но я бы предпочел второй вариант.


#32

А почему второй? Мне что-то показалось, что как раз он более уязвимый, потому как получаем два отдельных массива со всеми вытекающими.