Swift 将结构数组从UICollectionView传递到DetailView,并使用索引从一个项转到另一个项?

Swift 将结构数组从UICollectionView传递到DetailView,并使用索引从一个项转到另一个项?,swift,struct,uicollectionview,uicollectionviewcell,detailview,Swift,Struct,Uicollectionview,Uicollectionviewcell,Detailview,我有一个UICollectionView,它由productItem结构数组填充,结构蓝图位于它自己的名为ProductoItem.swift的swift文件中 struct ProductoItem { let id: Int let name: String var price: String var picture: String var description: String } 这是可行的,我可以用它成功地填充UICollectionView,

我有一个UICollectionView,它由productItem结构数组填充,结构蓝图位于它自己的名为ProductoItem.swift的swift文件中

struct ProductoItem {
    let id: Int
    let name: String
    var price: String
    var picture: String
    var description: String
}
这是可行的,我可以用它成功地填充UICollectionView,我现在要做的是将此结构传递给detailView,以便在detailView中创建此变量

var productos = [ProductoItem]()
我在prepareForSegue方法中添加了以下代码

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "detalleProducto" {

        let controller = segue.destination as! ProductoDetailViewController

        controller.productos = productos
    }
}
我不知道如何知道的是:


首先,当我们发送整个结构数组时,我想将存储在CollectionView单元格索引上的值传递给DetailView,以便仅使用产品单元格的数据填充它,然后我还想使用两个按钮转到下一个/上一个产品,只转到我的结构的下一个/上一个索引值。如何执行此操作?

首先,在detailView中创建一个新的“currentIndex:Int”属性

var productos = [ProductoItem]()
从第一个UIViewController(具有UICollectionView的控制器)将当前索引和数组传递给DetailView:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "detalleProducto" {
        let controller = segue.destination as! ProductoDetailViewController
        controller.productos = productos

        // do whatever you need to get your index
        controller.currentIndex = self.collectionView.indexPathsForSelectedItems()[0].row
    }
}
然后在DetailView中,您有您的数组和当前索引,因此您可以通过执行以下操作来获取此特定产品的信息:

let currentProduct = self.productos[currentIndex]

要访问上一个或下一个,您只需增加或减少“currentIndex”。

是否使用“didSelectItemAtIndexPath”打开详细视图?在“准备”中,您可以获取按下CollectionView.indexPathForCell(单元格)的单元格的索引,然后使用索引从数组中获取数据。检查这个问题。@RemyCilia是的,我会,如果我不使用结构,而是使用字典数组,我可以通过这样做来获取当前的indexpath。让currentProduct=arrayOfDictionaries[indexPath.item],但当我使用该结构尝试相同操作时,我得到一个空数组。无论如何,当我使用字典数组时,我可以通过该方法获得一个产品的对象,但我需要的是带上整个结构,使用所选单元格索引中的值来填充detailView,在这个视图中,我有两个按钮可以转到下一个/上一个产品,因此当您单击它们时,索引会发生变化)@Yan我可以通过在prepare(对于segue:)中执行此操作来获取按下的单元格的索引方法:让item=self.collectionView.indexPathsForSelectedItems,但我需要将该indexPath与我的结构数组一起使用,这样当我转到详细视图时,为填充数据而选择的结构就是所选的结构。一旦到了那里,我需要能够转到下一个或上一个索引值,这样我就可以切换到下一个/上一个产品。它工作得很好,我以前没有感谢你,因为我在度假,但你的解决方案很棒,谢谢