如何在集合视图之间传递数据 Swift

How to pass data between collection views Swift

我想将一些数据从一个集合视图传递到另一个集合视图,但出现以下错误:

Cannot convert value of type '[IndexPath]?' to expected argument type 'Int'

当我按下一个单元格时,我想向另一个集合视图显示一些数据。

这是代码。

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        performSegue(withIdentifier: "showItems", sender: self)
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destination = segue.destination as? ItemsViewController
        {


///Below is the error
            destination.items = guys[collectionView.indexPathsForSelectedItems]  

        }
    }

错误发生是因为 guys 数组需要一个 Int 索引而不是可选的索引路径数组。

一种解决方案是在 sender 参数中发送 indexPath

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    performSegue(withIdentifier: "showItems", sender: indexPath)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? ItemsViewController
    {
        let indexPath = sender as! IndexPath
        destination.items = guys[indexPath.row]
    }
}

items好像是一个数组,但是didSelectItemAt只考虑了当前的索引路径。所以要么声明一个 item 要么创建一个数组

destination.items = [guys[indexPath.row]]

另一种解决方案是确实使用 indexPathsForSelectedItems,但您必须以某种方式解包可选并将索引路径映射到行并获取给定索引处的项目。

你能试试下面的代码吗?

if let index = collectionView.indexPathsForSelectedItems?.first?.row {
    destination.items = guys[index]
}