如何使用deleteCharactersInRange?

时间:2014-11-22 17:24:33

标签: string swift nsrange

我想调用方法" deleteCharactersInRange"但它没有用。

这是苹果文档的摘录:

  

斯威夫特

     

func deleteCharactersInRange(_ aRange:NSRange)

    var day = ""

    let stringRange:NSRange = NSMakeRange(0, 4)
    day = day.deleteCharacterInRange(stringRange)


    // I've also tried this, because in the Documentation 
    // I can't see wether the method is void or returns a String

    day.deleteCharacterInRange(stringRange)

我收到此错误消息:

  

'字符串'没有名为' deleteCharactersInRange'

的成员

3 个答案:

答案 0 :(得分:13)

您引用的方法属于NSMutableString。但是既然你正在使用Swift而没有明确地创建一个,那么你得到一个Swift String

如果你想在Swift String上操作,你需要使用str.removeRange而使用Range相当尴尬:

var str = "Hello, playground"
str.removeRange(Range<String.Index>(start: str.startIndex, end:advance(str.startIndex, 7)))
// "playground"

答案 1 :(得分:4)

根据 DarkDust 的回答,我们可以制作一个类似Swift的extension,使removeRange更容易使用:

extension String {
    mutating func deleteCharactersInRange(range: NSRange) {
        let startIndex = self.startIndex.advancedBy(range.location)
        let length = range.length
        self.removeRange(startIndex ..< startIndex.advancedBy(length))
    }
}

现在你可以这样使用它:

let range = NSMakeRange(0,4)
var day = "Tuesday"
day.deleteCharactersInRange(range) // day = "day"

答案 2 :(得分:3)

Swift 3的更新

在Swift 3中,需要使用范围运算符a..<ba...b

var aString = "This is just the beginning"
str.removeRange(Range<String.Index>(str.startIndex ..< str.startIndex.advancedBy(10)))

或更简洁

aString.removeRange(aString.startIndex..<aString.startIndex.advancedBy(10))