首页 > 解决方案 > swift array.firstIndex(where: ...) 索引超出范围...但是为什么呢?

问题描述

这是一些代码行

            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 } 

而且效果很好...

标签: arraysswiftmultidimensional-array

解决方案


kindOf 这里的变量

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

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

$0[kindOf] < dayNumber

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


推荐阅读