Swift String replaceRange方法如何处理空范围

时间:2015-04-24 13:24:22

标签: ios swift

是否期望在具有相同开始和结束索引的范围的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没有长度的预期结果吗?

1 个答案:

答案 0 :(得分:1)

您应该设置开始和结束位置:

text?.replaceRange(
        (text?.startIndex.advancedBy(
            range.location // start position
            ))!..<(text?.startIndex.advancedBy(
                range.location + range.length // end position
                ))!,
        with: string)