Foundation
- это старый каркас pre-Swift.Он в основном написан на Objective-C и использует его типы.NSRange
- это структура C, интенсивно используемая в Objective-C в сочетании с NSString
.
NSString
преобразуется в Swift как String
, и большинство методов, использующих NSRange
, были преобразованы в методы, использующиеRange
(или другие типы Swift).Однако в некоторых методах тип Objective C все еще существует по разным причинам совместимости.UITextViewDelegate
и UITextFieldDelegate
являются простыми примерами.
Для правильного использования NSRange
вы должны сначала преобразовать String
в NSString
, например:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText: String) -> Bool
let previousText = (textView.text ?? "") as NSString
let newText = previousText.replacingCharacters(in: range, with: replacementText)
...
}
В этом методеrange
описывает диапазон изменяемой строки.Его locations
сообщает вам, куда помещается новый текст, а length
сообщает, какая часть предыдущего текста заменяется / удаляется.
Например, NSRange(location: 2, length: 1)
с replacementText: ""
сообщает, чтотретий символ удаляется (например, при нажатии клавиши Backspace).