Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use deleteCharactersInRange?

I want do call the method "deleteCharactersInRange" but it doesn't work.

This is an excerpt from Apples Documentation:

Swift

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)

I get this error message:

'String' does not have a member named 'deleteCharactersInRange'

like image 482
Codey Avatar asked Dec 01 '22 01:12

Codey


2 Answers

The method you're citing belongs to NSMutableString. But since you're using Swift and haven't explicitly created one, you get a Swift String.

If you want to operate on Swift String, you need to use str.removeRange and the rather awkward to use Range:

var str = "Hello, playground"
str.removeRange(Range<String.Index>(start: str.startIndex, end:advance(str.startIndex, 7)))
// "playground"
like image 60
DarkDust Avatar answered Dec 06 '22 23:12

DarkDust


In light of DarkDust's answer, we can make a very Swift-like extension that will make removeRange easier to use:

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

Now you can use it as such:

let range = NSMakeRange(0,4)
var day = "Tuesday"
day.deleteCharactersInRange(range) // day = "day"
like image 21
nhgrif Avatar answered Dec 07 '22 01:12

nhgrif