Как загрузить нестатические изображения из массива в представление коллекции в Swift

#ios #swift #firebase #uicollectionview #uicollectionviewcell

#iOS #swift #firebase #uicollectionview #uicollectionviewcell

Вопрос:

Я пытаюсь получить URL-адреса изображений из моего firebase firestore и сохранить их в массиве.

затем я хотел бы настроить представление коллекции, в котором изображения в массиве будут отображаться скользящим способом, аналогичным Instagram (по горизонтали).

Я извлекаю значения URL-адресов моих изображений и сохраняю их в переменных, а затем устанавливаю их в массив, но когда я настраиваю свой вид коллекции, он не работает, я считаю, что функции представления коллекции получают массив с пустыми значениями, поскольку я извлекаю и сохраняю их в представлении не так лиметод загрузки

что я делаю не так?

любая помощь по этому поводу? Спасибо. вот мой код:

 public var imgArray = [URL]()
var getHeaderURL : URL!
var getHeaderURL2 : URL!
var getHeaderURL3: URL!
var getHeaderURL4: URL!

var headerImgURL:String!
var headerImgURL2:String!
var headerImgURL3:String!
var headerImgURL4:String!
override func viewDidLoad(){

db.collection("Shops").document(getKey!)
        .addSnapshotListener { [self] snapshot, error in
            if error != nil {
                print(error ?? "Couldn't update text field TextUser according to database")
            }
            else
            {
     
                //getting url's as strings
                self.headerImgURL = snapshot?["ShopHeaderImg"] as? String
                self.headerImgURL2 = snapshot?["ShopHeaderImg2"] as? String
                self.headerImgURL3 = snapshot?["ShopHeaderImg3"] as? String
                self.headerImgURL4 = snapshot?["ShopHeaderImg4"] as? String
            }
             //converting url strings into url type.
             getHeaderURL = URL(string: self.headerImgURL)
             getHeaderURL2 = URL(string: self.headerImgURL2)
             getHeaderURL3 = URL(string: self.headerImgURL3)
             getHeaderURL4 = URL(string: self.headerImgURL4)
            
             self.imgArray = [getHeaderURL!,getHeaderURL2!,getHeaderURL3!,getHeaderURL4!]
             print(imgArray)
  }
  

функции представления моей коллекции:

 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    print(imgArray.count)
    print("this is the count of images")
    return imgArray.count
   
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = imageCollectionView.dequeueReusableCell(withReuseIdentifier: "imgCell", for: indexPath) as! ImageCellViewController
    
    
    cell.sliderImage.sd_setShowActivityIndicatorView(true)
    cell.sliderImage.sd_setIndicatorStyle(.gray)
    cell.sliderImage.sd_setImage(with: imgArray[indexPath.row], placeholderImage: UIImage(named: "Profile_avatar_placeholder_large"))
    
    return cell
}
  

Комментарии:

1. Вы настроили источник данных для CollectionView? также вы должны вызвать super.viewDidLoad()

2. Когда вы перезагружаете представление коллекции? Пожалуйста, используйте array вместо жестко заданных переменных.

3. @MishaVyrko да, я это сделал, но я не включил в вопрос, чтобы упростить его понимание, даже загрузка super.view включена в мой код, но забыла включить в вопрос.

4. @Rob когда я перезагружаю collectionview, он выдает сообщение об ошибке «sliderimage не соответствует кодированию».

Ответ №1:

Вызовите reloadData() представление коллекции после строки, которую вы заполняете imgArray .