Home > OS >  How to show data in my application? Swift and Firebase
How to show data in my application? Swift and Firebase

Time:07-26

I am facing a problem in my application. When I run my application in the emulator, I don't get any data and just a white screen.

I decided to use Firestore as a backend. Below I provide the code and hope you can help me.

ViewController

class ViewController: UIViewController {

    @IBOutlet weak var cv: UICollectionView!

    var channel = [Channel]()
    override func viewDidLoad() {
        
        super.viewDidLoad()
        self.cv.delegate = self
        self.cv.dataSource = self
        
        let db = Firestore.firestore()
        db.collection("content").getDocuments() {( quarySnapshot, err) in
            if let err = err {
                print("error")
            } else {
                for document in quarySnapshot!.documents {
                    if let name = document.data()["title"] as? Channel {
                        self.channel.append(name)
                    }
                    
        }
                self.cv.reloadData()

            }
}

    }
}


extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return channel.count
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        
                    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ContentCell
                    let indexChannel = channel[indexPath.row]
                    cell.setup(channel: indexChannel)
                    return cell
              }
        
    }
    

This is my cell

class ContentCell: UICollectionViewCell {
    
    @IBOutlet weak var channelText: UILabel!
    @IBOutlet weak var subtitle: UITextView!
    
    func setup(channel: Channel) {
        channelText.text = channel.title
        subtitle.text = channel.subtitle
    }
}

If you need additional information - write

CodePudding user response:

Your problem is here

 if let name = document.data()["title"] as? Channel {
     self.channel.append(name)
 }

you can't cast a String to a Custom data type (Channel) , so according to your data you can try this

if let title = document.data()["title"] as? String , let subtitle = document.data()["subtitle"] as? String  {
   let res = Channel(title:title,subtitle:subtitle)
   self.channel.append(res)
}
  • Related