首页 > 解决方案 > 无法检索要显示的选定图像 URL - Firebase / Swift

问题描述

我有一个collectionview,想让用户点击一个图像,将他们带到另一个具有该图像但更大的视图控制器。问题是图像没有加载到新的视图控制器上。我不确定问题是什么。如果有人可以帮助我,我将不胜感激。谢谢!

可变图像:

var images = [UserImages]()

didSelectItemAt 集合视图:

 func collectionView(_ imageCollection: UICollectionView, didSelectItemAt indexPath: IndexPath) {
             
        let vc = storyboard?.instantiateViewController(withIdentifier: "DetailViewController") as? DetailViewController
        
        vc?.name = images[indexPath.row] // Issue: 'Cannot assign value of type 'UserImages' to type 'String'
        
        self.navigationController?.pushViewController(vc!, animated: true)
    }

细节视图控制器:

class DetailViewController: UIViewController {
    
    @IBOutlet weak var img: UIImageView!
    var name = ""
    var dbRef: DatabaseReference!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        dbRef = Database.database().reference().child("users/\(Auth.auth().currentUser!.uid)/Images/\("name")")
        
        loadDB()

    }
    
    func loadDB() {
        
       dbRef.observe(DataEventType.value, with: { (snapshot) in
            
            var newImages = [UserImages]()
            
            for UserImagesSnapshot in snapshot.children {
                
                let UserImagesObject = UserImages(snapshot: UserImagesSnapshot as! DataSnapshot)
                newImages.append(UserImagesObject)
            }
            
            DispatchQueue.main.async {
                self.img.image = UIImage(named: self.name)
            }
            
        })
        
        
    }

}

UserImages(用于从 firebase 实时数据库中提取 imageURL)

struct UserImages {
    
    let key: String!
    let url: String!
    
    let itemsRef: DatabaseReference!
    
    init (url:String, key:String) {
        
        self.key = key
        self.url = url
        self.itemsRef = nil
        
    }
    
    init(snapshot: DataSnapshot) {
        
        key = snapshot.key
        itemsRef = snapshot.ref
        
        url = snapshot.value as? String
    }    
}

标签: arraysswiftfirebasefirebase-realtime-database

解决方案


利用

vc?.name = images[indexPath.row].url

并使用SDWebImage从服务器加载图像


推荐阅读