如何使用 Alamofire 将图像填充到 UICollectionView Swift 4

How to fill images in to UICollectionView with Alamofire Swift 4

我有一个聊天记录,它只是一个 UICollectionView。每个销售都有一个头像 (UIImage) 和一个文字气泡。我试图通过使用 Alamofire 从服务器获取头像 URL 来 为头像 填充适当的图像,如下所示:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "chatMessage", for: indexPath) as! ChatMessageCell

    let imageURL = URL(string: messagesArray![indexPath.item].userAvatar)
            Alamofire.download(imageURL!).responseData { response in
                if let data = response.result.value {
                    cell.userAvatar.image = UIImage(data: data)
                }
            }

    cell.messageText.text = messagesArray![indexPath.item].userText
}

我的问题: 有的单元格出现头像,有的不出现。我认为这与 Alamofire 异步工作有关。所以我的问题是如何将图像正确填充到 UICollectionView 以在每个单元格中显示每个头像?

我认为最好使用 SDWebImage ,因为根据您当前的实现,图像获取会发生多次

imageView.sd_setImage(with: URL(string: "http://www.example.com/path/to/image.jpg"), placeholderImage: UIImage(named: "placeholder.png"))

此处SDWebImage

UICollectionView 重用现有单元格。如果您有一个包含一百万个单元格的 collectionView,则不会实例化一百万个 UICollectionView 单元格,但它们在滚动时会被重用。现在您的结果回调块可能会设置相同单元格的图像。

要解决您的问题,您需要缓存图像。有多个关于此主题的教程。