Actualización para Swift 4
En Swift 4, se String
ajusta de Collection
nuevo, por lo que es posible utilizardropFirst
y dropLast
recortar los inicios y finales de cadenas. El resultado es de tipo Substring
, por lo que debe pasarlo al String
constructor 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 Int
para 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 dropFirst
y dropLast
antes 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 , dropFirst
y 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 dropFirst
y dropLast
antes 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))
}
}
advance
lanzandodisplay.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.