通过Swift中的迭代器向后迭代字符串

时间:2016-07-07 00:49:16

标签: swift loops iterator range

我有这段代码:

var formatterIndex = hourFormattingPattern.endIndex
let formattingPatternRange = formatterIndex ..< hourFormattingPattern.startIndex

但是当调用第二行时,我收到了错误访问错误。有没有办法指定一个通过字符串hourFormattingPattern反转的范围?初始化后,我这样做:

while !stop {
    //Do pattern matching and switching with string and replace char string
    formatterIndex = formatterIndex.predecessor()

    if formatterIndex <= hourFormattingPattern.endIndex || tempIndex <= tempString.endIndex {
         stop = true
     }

 }

任何帮助表示赞赏。谢谢

1 个答案:

答案 0 :(得分:2)

是的,您不能形成从较大数字到较小数字的范围。此外,endIndex不是有效索引 - 它是最后一个有效索引之后的索引。但是,你可以形成你的前锋然后反转它:

var formatterIndex = hourFormattingPattern.endIndex
let formattingPatternRange = hourFormattingPattern.startIndex..<formatterIndex

for formatterIndex in formattingPatternRange.reversed() where !stop {
    //Do pattern matching and switching with string and replace char string

    if formatterIndex <= hourFormattingPattern.endIndex || tempIndex <= tempString.endIndex {
        stop = true
    }
}

但是,您的逻辑可能已关闭,因为 formatterIndex的所有可能值均为<= hourFormattingPattern.endIndex,因此stop将设置为true在第一轮循环中。