2015-12-04 4 views
0

Я делаю расширение строки для поиска нескольких позиций, которые символ может встречаться в строке. Это мой код:Позиции символа в строке со строкой 2

let letter: Character = "l" 

extension String { 
    func checkLetter(letter: Character) { 
     if let index = self.rangeOfString(AString: String(letter), range: Range<Int>(start: 2, end: 5) ) { 
      print(index) 
     } 
    } 
} 

Я просто полностью потерял, как заполнить часть этого диапазона. Там постоянно возникают ошибки. Я хочу написать цикл while, который проверяет индекс символа в строке. Когда он будет найден, он обновит переменную, которую я могу вставить в диапазон, чтобы он пропускал часть в следующий раз во всем цикле, который содержал позицию ранее найденного символа. Надеюсь, что это немного ясно. Вот несколько псевдо-код:

extension func 
    let range = 0 
    while loop: checks if character is in string 
     update range to index 
     append index to NSarray list 
return nsarray list and if none found return nil 
+0

Почему расширение, должно быть, есть веская причина? – zaph

+0

Просто мой код выглядит немного чище и понятнее. Вот поток: http://stackoverflow.com/questions/32285412/how-to-find-all-positions-of-one-string-in-another-string-in-swift2. –

+1

Это может помочь в качестве отправной точки: [Найти все индексы поискового термина в строке] (http://stackoverflow.com/questions/30890920/find-all-indices-of-a-search-term-in- строка). –

ответ

4

Это ваше расширение, написанное в соответствии с методом функционального программирования.

extension String { 
    func indexesOfChar(c: Character) -> [Int] { 
     return characters 
      .enumerate() 
      .filter { $0.element == c } 
      .map { $0.index } 
    } 
} 

Тест

"Luminetic Land".indexesOfChar("i") // [3, 7] 
+0

Это очень хороший фрагмент кода m8. Спасибо, что ответили на мой вопрос! –

0

Просто для справки yourString.characters.indexOf("a") даст вам индекс первого появления "a" в yourString. Вы можете использовать это в цикле while, чтобы найти "a" в диапазоне от предыдущего индекса "a" плюс один, а затем добавить индексы в массив до тех пор, пока результат не будет отрицательным.

Смежные вопросы