【问题标题】:Swift Error - ambiguous reference to member 'subscript'Swift 错误 - 对成员“下标”的模糊引用
【发布时间】:2018-02-20 16:04:23
【问题描述】:

我有一个 dobule 数组,名为comingingTransactions。

var upcomingTransactions: [[Transaction]]

但是当我试图从它到达我的单元格时,我在

处收到了这个错误“对成员'下标'的模糊引用”
for (j, _) in upcomingTransactions[i] {

我想要的只是从每个部分中检索单元格。我用我的 i var 检索部分,但是当我试图通过使用第二个 var j 来捕获单元格时,我需要放一些东西,但我看不到什么。这是我的代码:

var indexPaths: [IndexPath] = []
for i in 0..<upcomingTransactions.count {
    for (j, _) in upcomingTransactions[i] {
        indexPaths.append(IndexPath(row: j, section: i))
    }
}

【问题讨论】:

  • 顺便说一句,iTransaction 而不是 Int 您编写外部 if 的方式
  • 好吧。我没明白。对不起。你什么意思 ?请问在这种情况下我该怎么办?
  • @Danyl 他们的意思是upcomingTransaction 是一个数组数组
  • @the4kman 我知道,这就是为什么我要问如何在我的情况下捕获与单元格相对应的第二个元素......有什么想法吗?
  • 您需要将enumerated() 添加到upcomingTransactions[i] (upcomingTransactions[i].enumerated()) 才能使用j 作为行索引。

标签: arrays swift


【解决方案1】:

您的for-each 迭代将导致ij(假设我们修复编译错误)成为Transaction 实例,因为for-each 迭代数组中的值。如果您想要索引,则有两种选择:

  1. 使用enumerated(),它也会为您提供索引:

    var indexPaths: [IndexPath] = []
    for (i, arr) in upcomingTransactions.enumerated() {
        for (j, _) in arr.enumerated() {
            indexPaths.append(IndexPath(item: j, section: i))
        }
    }
    
  2. map 索引:

    let indexPaths = upcomingTransactions.enumerated().flatMap { (i, arr) in
       (0..<arr.count).map { j in 
           IndexPath(item: j, section: i) 
        }
    }
    

第二种方法更实用,而第一种方法更迫切。我个人推荐使用函数式的,因为它只使用不可变的实体。

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多