是否期望在具有相同开始和结束索引的范围的Swift字符串上调用replaceRange
时,replaceRange
方法将插入新字符并使字符串更长?
例如使用此方法:
func replaceCharAtPositionForWord(word:String, position: Int, char: Character) -> String {
var newWord : String = word;
var range : Range = Range<String.Index>(start: advance(newWord.startIndex, position),
end:advance(newWord.startIndex, position+1))
newWord.replaceRange(range, with: String(char))
return newWord;
}
调用replaceCharAtPositionForWord("Hello", 3, Character("a"))
按预期返回“Helao”。
但如果相反,上面的Range
设置为:
var range : Range = Range<String.Index>(start: advance(newWord.startIndex, position),
end:advance(newWord.startIndex, position))
然后代码插入一个新字符并将字符串结果扩展为“Helalo”
这是Range
没有长度的预期结果吗?
答案 0 :(得分:1)
您应该设置开始和结束位置:
text?.replaceRange(
(text?.startIndex.advancedBy(
range.location // start position
))!..<(text?.startIndex.advancedBy(
range.location + range.length // end position
))!,
with: string)