Ваш написанный код выглядит до сих пор в основном нормально.
Некоторые изменения, которые я бы порекомендовал:
Item
должен быть структурой, а не классом, и его члены должны быть постоянными (let
), если вы не очень хорошо и указывает c причины в противном случае. - "полученный через API запрос на получение в какой-то момент после инициализации" звучит так, как будто это необязательно (
String?
)
Это где я должен сделать запрос API?
Нет. Никогда не выполняйте сетевые запросы или что-либо сложное в cellForItemAt
. Просто получите соответствующую запись из вашего источника данных (т.е. из вашего массива элементов) и заполните ячейку этим.
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
// get a cell
let cell = collectionView.dequeueResuableCell(withIdentifier: "yourCellIdentifier", indexPath: indexPath) as! YourCellClass
// get the data
let item = self.items[indexPath.row]
// populate the cell with the data
cell.setup(with: data) // you need to implement this in your cell
return cell
}
Как я могу обновить всю информацию об элементах по запросу пользователя
Сделайте соответствующий сетевой запрос / вычисления или все, что необходимо, и, как только вы получите результат, перезапишите ваш массив items
и вызовите reloadData()
в CollectionView. Поместите это в метод, который вы можете вызвать, например, как действие нажатия кнопки, и, конечно, когда изначально отображается представление вашей коллекции.