2016-07-07 5 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 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 설정됩니다 루프를 실행합니다.