Это похоже на ответ Эмили, однако, поскольку вы специально спросили, как преобразовать NSRange
в Range<String.Index>
, вы сделали бы что-то вроде этого:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let start = advance(textField.text.startIndex, range.location)
let end = advance(start, range.length)
let swiftRange = Range<String.Index>(start: start, end: end)
...
}
EPHEMIDED находится на правом пути с моделями зрения, но я думаю, что есть способ сделать это, что на самом деле довольно приятно. Данные. Следации
фактически написаны с видами, и вы должны использовать либо viewl
или ViewR
типы, чтобы набрать шаблон на структуре данных.
{-# LANGUAGE ViewPatterns #-}
floodFillWorker image _ _ (Seq.viewl -> EmptyL) = image
floodFillWorker image base tolerance queue = doSomeWork image
У вас Использование моделей просмотра вместо охранников, но на самом деле это не лучше (IMO). Охранники выглядят хорошо для меня ...
{-# LANGUAGE ViewPatterns #-}
floodFillWorker image _ _ (Seq.null -> True) = image
floodFillWorker image base tolerance queue = doSomeWork image