代码之家  ›  专栏  ›  技术社区  ›  baxu

indexPath不可变吗?敏捷的

  •  1
  • baxu  · 技术社区  · 9 年前

    我正在尝试使用

    selectedPrevious = mons[indexPath -= 1]
    

    但我得到的错误是: indexPath是一个let常量 然而,似乎无法将其更改为变量。我尝试过创建和Int变量,并将其分配给索引,如下所示:

    index = indexPath.row -= 1
    selectedPrevious = mons[index]
    

    但现在,尝试使用 += -= 给出新的错误。

    无法用类型为“()”的索引对类型为“[Monster]”的值进行下标

    我如何增加这个。其目的是在我的第二个数据库中重新加载数据 Viewcontroller .只是路过 index 变量本身不影响数据重新加载。

    1 回复  |  直到 9 年前
        1
  •  3
  •   Sandeep Bhandari    9 年前

    传递给swift函数(通过值传递)的参数为: let 默认情况下。这意味着可以读取传递给函数的参数值,但不能修改。

    这适用于所有变量,而不仅仅是indexPath:)

    因此,您所做的是错误的:)如果您想修改indexPath的值,您可以这样做:)

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "myCell", for: indexPath)
            var copiedIndexPath = indexPath
            copiedIndexPath.row = copiedIndexPath.row + 1
    }
    

    如您所见,我创建了索引路径的本地副本并修改了其值:)

    编辑:

    陈述

    indexPath.row -= 1
    

    不仅将indexPath的行减去1,还将尝试将数据分配回默认情况下允许的indexPath。如果您真的想修改indexPath值本身,可以执行上面提到的操作。

    如果您的目的只是计算行索引,而不是修改索引XPath,那么它本身就是

    index = indexPath.row - 1