Вам нужно поместить ваши данные в массив. Тогда ваши методы источника данных могут использовать массив для предоставления необходимых данных.
Добавьте свойство к вашему контроллеру представления:
var dates = [Date]()
Затем в viewDidLoad
заполните массив датами.
override func viewDidLoad() {
super.viewDidLoad()
// any other code you need
// populate array
let today = Date()
dates.append(today)
for days in 1...4 {
let date = Calendar.current.date(byAdding: .day, value: days, to: today)!
dates.append(date)
}
}
Затем обновите методы источника данных:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return dates.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = dateCollection.dequeueReusableCell(withReuseIdentifier: "dateCell", for: indexPath) as! DateCell
let date = dates[indexPath.row]
let formatter = DateFormatter()
formatter.dateFormat = "E"
let weekday = formatter.string(from: date)
formatter.dateFormat = "dd"
let day = formatter.string(from: date)
cell.day.text = "\(weekday)"
cell.date.text = day
return cell
}
При этом вам не нужно жестко задавать количество или конкретные даты в методах источника данных. Если вам нужны разные даты, просто обновите код в viewDidLoad
, чтобы поместить в массив любые даты, которые вы хотите.