Вы должны предоставить необходимые indexPath
, как показано ниже,
if let indexPath = self.collectionView.indexPathsForSelectedItems?.first {
print(indexPath)
loadPostsValue(indexPath: indexPath)
}
В настоящее время вы не передаете объект IndexPath
, вместо этого вы передаете его Type
, на который compiler
жалуется. Также indexPathsForSelectedItems
- это array
всего выбранного элемента, поэтому вы должны получить первый indexPath
, если множественный выбор вашего collectionView
выключен.
Редактировать Я думаю, что простой способ - не использовать indexPathsForSelectedItems
, когда у вас уже есть выбранный indexPath
из самого метода делегата. Вы можете просто передать это, как показано ниже,
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
loadPostsValue(indexPath: indexPath)
}
Как вы упомянули в комментариях, я думаю, что если вы просто хотите обновить количество лайков, вы можете сделать это, как показано ниже,
func loadPostsValue(indexPath: IndexPath) {
let ref = Database.database().reference()
ref.child("posts").observe(.childAdded) { (snapshot: DataSnapshot) in
if let dict = snapshot.value as? [String: Any] {
guard let titleText = dict["title"] as? String else{ return }
let post = self.posts[indexPath.row]
post.heartInt = dict["heart"] as! Int
self.collectionView.reloadItems(at: [indexPath])
}
}
}