【问题标题】:swift array.firstIndex(where: ...) index out of range ... but why?swift array.firstIndex(where: ...) 索引超出范围...但是为什么呢?
【发布时间】:2021-04-17 22:25:36
【问题描述】:

这里有几行代码

            print ("dayNumber: \(dayNumber)")
            print ("all: \(self.RKINumbersOfDays)")
            print ("kindOf: \(kindOf): \(self.RKINumbersOfDays[kindOf])")

            let indexToUse: Int
            if let foundIndex = self.RKINumbersOfDays.firstIndex(where: { $0[kindOf] < dayNumber } ) {
                indexToUse = foundIndex
            } else {
                indexToUse = 0
            }

给出这个输出

dayNumber: 7316
all: [[7316], [7316], [7316], [7316]]
kindOf: 1: [7316]
Fatal error: Index out of range: file Swift/ContiguousArrayBuffer.swift, line 444
2021-01-12 23:12:29.720561+0100 CoBaT[7595:6310152] Fatal error: Index out of range: file Swift/ContiguousArrayBuffer.swift, line 444
(lldb) 

在调试模式下,“if let foundIndex = self.RKINumbersOfDays.firstIndex(where ...”行被标记为红色,并带有“致命错误:索引超出范围”

但是为什么???

编辑: 好吧,有时“你看不到阿甘,因为所有的树”;-)

当然:正确的语法是:

self.RKINumbersOfDays[kindOf].firstIndex(where: { $0 < dayNumber } 

而且效果很好……

【问题讨论】:

  • 您使用的是什么索引? 1?
  • 索引将在 if let 语句中设置.. 我多次使用这个结构没有任何问题.. 到目前为止 ;-) ... 所有变量都被打印出来

标签: arrays swift multidimensional-array


【解决方案1】:

变量kindOf在这里

print ("kindOf: \(kindOf): \(self.RKINumbersOfDays[kindOf])")

用于主数组计数(RKINumbersOfDays),而这里用于子元素计数

$0[kindOf] < dayNumber

其中一个的计数小于kindOf(这里的计数均为 1,因此最大索引应为 0 而不是 1)

【讨论】:

  • 正确的语法是:"self.RKINumbersOfDays[kindOf].firstIndex(where: { $0
猜你喜欢
  • 2015-11-05
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 2015-09-12
  • 1970-01-01
相关资源
最近更新 更多