Swift advancedBy no puede manejar el carácter newline "\ r \ n"

Me encontré con un problema muy extraño hoy con Swift 2.

Tengo este método simple para extraer una subcadena basada en NSRange:

func substringWithRange(string: String, range: NSRange) -> String { let startIndex = string.startIndex.advancedBy(range.location) let endIndex = startIndex.advancedBy(range.length) let substringRange = Range<String.Index>(start: startIndex, end: endIndex) return string.substringWithRange(substringRange) } 

Con cadenas ordinarias o cadenas que contienen caracteres unicodos, todo funciona bien. Pero una cadena contiene los caracteres newline "\ r \ n" y de repente

 let startIndex = string.startIndex.advancedBy(range.location) 

es siempre 1 mayor de lo que debería ser.

 let string = "<html>\r\n var info={};</html>" let range = NSMakeRange(9, 12) let substring = substringWithRange(string, range: range) //Expected: var info={}; //Actual: ar info={};< //string.startIndex = 0 //range.location = 9 //startIndex after advancedBy = 10 

¿Alguien sabe por qué AdvancedBy está actuando de esa manera y cómo puedo resolver este problema?

La razón es que Swift trata \r\n como un personaje

 let cr = "\r" cr.characters.count // 1 let lf = "\n" lf.characters.count // 1 let crlf = "\r\n" crlf.characters.count // 1