2016-07-07 86 views
0

迭代器我有這樣的代碼:通過遍歷字符串向後穿過斯威夫特

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 
    } 

} 

任何幫助表示讚賞。謝謝

+0

你究竟想要做什麼?您可以使用'for for index in(hourFormattingPattern.startIndex ..

回答

1

是的,你不能形成一個範圍從一個較大的數字到一個較小的。此外,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運行你的循環。