Tengo esta vista de desplazamiento personalizada para mi aplicación, y tengo una matriz de datos que está dentro de mi clase de delegado principal. También tengo una extensión separada (en el mismo archivo) para manejar los datos, pero parece que no puedo acceder a los datos con dos errores Use of unresolved identifier data:

class HomeViewController: UIViewController {

    fileprivate let data = [
        CustomData(title: "Test", image: #imageLiteral(resourceName: "splash_icon"), url: "clipifyapp.com"),
        CustomData(title: "Test2", image: #imageLiteral(resourceName: "done-button"), url: "clipifyapp.com"),
        CustomData(title: "Test2", image: #imageLiteral(resourceName: "notificationIcon"), url: "clipifyapp.com")
    ]

}

extension UIViewController: UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {

    public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: collectionView.frame.width/2.5, height: collectionView.frame.width/2)
    }

    public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return data.count // ERROR ONE
    }

    public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CustomCell
        cell.data = self.data[indexPath.row] // ERROR TWO
        return cell
    }

}

¿Me estoy perdiendo algo obvio?

0
user11517913 30 dic. 2019 a las 19:55

2 respuestas

La mejor respuesta

data está disponible solo en HomeViewController, no en la clase base UIViewController

Reemplazar

extension UIViewController: UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {

Con

extension HomeViewController: UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
1
vadian 30 dic. 2019 a las 17:01

Estás extendiendo UIViewController, pero ¿no querías extender HomeViewController en su lugar?

Si extiende UIViewController, no está extendiendo la subclase que realmente contiene data. Además, estaría extendiendo cada UIViewController en toda su aplicación, lo que probablemente no sea algo que quiera hacer con un UICollectionViewDataSource.

1
Daniel 30 dic. 2019 a las 17:00