Проверка работоспособности: извлечение кода из программы прерываний работы программы
У меня есть ниже for
цикл:
func test(_ fourHundredYears: [CountPatternPair]) {
// Iterate over `CountPatternPairs` containing hundred-year `CountPatternPairs`
for hundredYearCPP in fourHundredYears {
// Do the below as many times as indicated by the count in the `CountPatternPair`
for _ in 1 ... hundredYearCPP.0 {
// Iterate over `CountPatternPairs` containing four-year `CountPatternPairs`
for fourYearCPP in (hundredYearCPP.1 as! [CountPatternPair]) {
// Do the below as many times as indicated by the count in the `CountPatternPair`
for _ in 1 ... fourYearCPP.0 {
// Iterate over `CountPatternPairs` containing year `CountPatternPairs
for yearCPP in (fourYearCPP.1 as! [CountPatternPair]) {
// Do the below as many times as indicated by the count in the `CountPatternPair`
for _ in 1 ... yearCPP.0 {
// Iterate over each month in the array element of the `CountPatternPair`
for month in (yearCPP.1 as! [[DayTotalPair]]) {
// Iterate over each `DayTotalPair` in each month
for dtp in month {
oeod.append(dtp.1, over: dtp.0)
i += dtp.0
if minLimit.equals(oeod.at(oeod.count - 1)) { return }
}
}
}
}
}
}
}
}
}
Я написал это чудовище, чтобы проверить некоторую логику с намерением, чтобы, когда логика работала правильно, я реорганизовал ее как рекурсивную функцию, чтобы сделать ее чище. Я сделал, но рекурсивная версия не работала. Я подумал, что что-то упустил, но в конце концов приостановил, потому что всю жизнь не мог понять, что это было. Продолжая тестирование, я решил извлечь часть циклической логики в свои собственные функции, чтобы сделать ее чище. НЕ ДОБАВЛЯЕТ ЛЮБУЮ НОВУЮ ЛОГИКУ. И от того, что мне кажется, не меняется порядок исполнения какой-либо логики.
Но, к моему ужасу, та же самая функция, преобразованная в отдельные функции, также не работала. Прямо скопировал и вставил его, и все равно не работает. Попробовал с помощью extract to
функция в Xcode
в случае, если это была моя копия и вставка, которая сломала это, также не работало.
Может ли кто-нибудь взглянуть на приведенную ниже извлеченную версию приведенного выше кода, чтобы узнать, есть ли в нем что-то, что может привести к тому, что логика будет выполняться не так, как указано выше?
func iterateFourHundredYears(_ fourHundredYears: [CountPatternPair]) {
// Iterate over `CountPatternPairs` containing hundred-year `CountPatternPairs`
for hundredYearCPP in fourHundredYears {
iterateHundredYearCPP(hundredYearCPP)
}
}
func iterateHundredYearCPP(_ hundredYearCPP: CountPatternPair) {
// Do the below as many times as indicated by the count in the `CountPatternPair`
for _ in 1 ... hundredYearCPP.0 {
// Iterate over `CountPatternPairs` containing four-year `CountPatternPairs`
for fourYearCPP in (hundredYearCPP.1 as! [CountPatternPair]) {
iterateFourYearCPP(fourYearCPP)
}
}
}
func iterateFourYearCPP(_ fourYearCPP: CountPatternPair) {
// Do the below as many times as indicated by the count in the `CountPatternPair`
for _ in 1 ... fourYearCPP.0 {
// Iterate over `CountPatternPairs` containing year `CountPatternPairs
for yearCPP in (fourYearCPP.1 as! [CountPatternPair]) {
iterateYearCPP(yearCPP)
}
}
}
func iterateYearCPP(_ yearCPP: CountPatternPair) {
// Do the below as many times as indicated by the count in the `CountPatternPair`
for _ in 1 ... yearCPP.0 {
// Iterate over each month in the array element of the `CountPatternPair`
for month in (yearCPP.1 as! [[DayTotalPair]]) {
// Iterate over each `DayTotalPair` in each month
for dtp in month {
oeod.append(dtp.1, over: dtp.0)
i += dtp.0
if minLimit.equals(oeod.at(oeod.count - 1)) { return }
}
}
}
}