Actualización para Swift 4
En Swift 4, se Stringajusta de Collectionnuevo, por lo que es posible utilizardropFirst y dropLastrecortar los inicios y finales de cadenas. El resultado es de tipo Substring, por lo que debe pasarlo al Stringconstructor para obtener un String:
let str = "hello"
let result1 = String(str.dropFirst()) // "ello"
let result2 = String(str.dropLast()) // "hell"
dropFirst()y dropLast()también tome an Intpara especificar la cantidad de caracteres que se eliminarán:
let result3 = String(str.dropLast(3)) // "he"
let result4 = String(str.dropFirst(4)) // "o"
Si especifica más caracteres para eliminar de los que hay en la cadena, el resultado será la cadena vacía ("" ).
let result5 = String(str.dropFirst(10)) // ""
Actualización para Swift 3
Si solo desea eliminar el primer carácter y desea cambiar la cadena original en su lugar, consulte la respuesta de @ MickMacCallum. Si desea crear una nueva cadena en el proceso, use substring(from:). Con una extensión de String, puede ocultar la fealdad de substring(from:)y substring(to:)crear adiciones útiles para recortar el comienzo y el final de un String:
extension String {
func chopPrefix(_ count: Int = 1) -> String {
return substring(from: index(startIndex, offsetBy: count))
}
func chopSuffix(_ count: Int = 1) -> String {
return substring(to: index(endIndex, offsetBy: -count))
}
}
"hello".chopPrefix() // "ello"
"hello".chopPrefix(3) // "lo"
"hello".chopSuffix() // "hell"
"hello".chopSuffix(3) // "he"
Como dropFirsty dropLastantes que ellos, estas funciones fallarán si no hay suficientes letras disponibles en la Cadena. La persona que llama tiene la responsabilidad de utilizarlos correctamente. Ésta es una decisión de diseño válida. Uno podría escribirlos para devolver un opcional que luego tendría que ser desenvuelto por la persona que llama.
Swift 2.x
Por desgracia en Swift 2 , dropFirsty dropLast(la mejor solución anterior) no son tan convenientes como lo eran antes. Con una extensión de String, puede ocultar la fealdad desubstringFromIndex y substringToIndex:
extension String {
func chopPrefix(count: Int = 1) -> String {
return self.substringFromIndex(advance(self.startIndex, count))
}
func chopSuffix(count: Int = 1) -> String {
return self.substringToIndex(advance(self.endIndex, -count))
}
}
"hello".chopPrefix() // "ello"
"hello".chopPrefix(3) // "lo"
"hello".chopSuffix() // "hell"
"hello".chopSuffix(3) // "he"
Me gusta dropFirsty dropLastantes que ellos, estas funciones fallarán si no hay suficientes letras disponibles en la Cadena. La persona que llama tiene la responsabilidad de utilizarlos correctamente. Ésta es una decisión de diseño válida. Uno podría escribirlos para devolver un opcional que luego tendría que ser desenvuelto por la persona que llama.
En Swift 1.2 , deberá llamarchopPrefix así:
"hello".chopPrefix(count: 3) // "lo"
o puede agregar un guión bajo _a las definiciones de función para suprimir el nombre del parámetro:
extension String {
func chopPrefix(_ count: Int = 1) -> String {
return self.substringFromIndex(advance(self.startIndex, count))
}
func chopSuffix(_ count: Int = 1) -> String {
return self.substringToIndex(advance(self.endIndex, -count))
}
}
advancelanzandodisplay.text!a NSString. No digo que sea una buena solución, solo corregir un posible error. Con NSString, puede indexarlo con Int. - Y la razón por la que no puede indexar con Int no es por Unicode; es porque un personaje puede constar de varios puntos de código compuestos.