Ambiguous reference to member 'collectionView(_:layout:minimumLineSpacingForSectionAt:)'

浪尽此生 提交于 2020-01-24 19:19:58

问题


I have found an error in my code that is really annoying me. I coded Swiping View Controller in a separate application and now I am trying to integrate it into this new application.

Basically the error is as follows:

Ambiguous reference to member 'collectionView(_:layout:minimumLineSpacingForSectionAt:)'

here is some of my code, let me know if I need to add more!!

extension SwipingController {

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 0
    }

     func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return pages.count
    }

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

        let page = pages[indexPath.item]
        //let page = pages[indexPath.row]
        cell.page = page
        return cell
    }

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

}

the error happens on every mention of "CollectionView" in the main view controller

 @objc private func handleNext() {
        let nextIndex = min(pageControl.currentPage + 1, pages.count - 1)
        let indexPath = IndexPath(item: nextIndex, section: 0)
        pageControl.currentPage = nextIndex
        collectionView?.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
    }

let me know if I need to add more code in please!


回答1:


The problem appears because you are trying to use the variable collectionView in your ViewController when this are not declare yet, to solve this you need to declare it as follows.

Swift 5.x:

@IBOutlet weak var collectionView: UICollectionView?

This generates an IBOutlet which you can use to connect the variable created with the UICollectionView from your storyboard. Also don’t forget to connect the delegate and the dataSource with ViewController that will implement it.

func numberOfSections(in collectionView: UICollectionView) -> Int

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell

For more information about how to implement the UICollectionView click here:

As a personal recommendation I would say at the moment you declare UI variables, as UIView, UILabel or in this case an UICollectionView, use prefix to maintain an order and suitable nomenclature.

For example:

@IBOutlet weak var clvPages: UICollectionView?

Hope this helps you, I’ll stay tuned to your comments.



来源:https://stackoverflow.com/questions/59889660/ambiguous-reference-to-member-collectionview-layoutminimumlinespacingforsect

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!