Solo accediendo hacia atrás
La mejor forma es utilizarlo substringToIndex
combinado con la endIndex
propiedad y la advance
función global.
var string1 = "www.stackoverflow.com"
var index1 = advance(string1.endIndex, -4)
var substring1 = string1.substringToIndex(index1)
Buscando una cuerda empezando por la espalda
Usar rangeOfString
y configurar options
en.BackwardsSearch
var string2 = "www.stackoverflow.com"
var index2 = string2.rangeOfString(".", options: .BackwardsSearch)?.startIndex
var substring2 = string2.substringToIndex(index2!)
Sin extensiones, Swift puramente idiomático
Swift 2.0
advance
ahora es parte de Index
y se llama advancedBy
. Lo haces como:
var string1 = "www.stackoverflow.com"
var index1 = string1.endIndex.advancedBy(-4)
var substring1 = string1.substringToIndex(index1)
Swift 3.0
No puede llamar advancedBy
a String
porque tiene elementos de tamaño variable. Tienes que usar index(_, offsetBy:)
.
var string1 = "www.stackoverflow.com"
var index1 = string1.index(string1.endIndex, offsetBy: -4)
var substring1 = string1.substring(to: index1)
Se ha cambiado el nombre de muchas cosas. Los casos están escritos en camelCase, se startIndex
convirtió lowerBound
.
var string2 = "www.stackoverflow.com"
var index2 = string2.range(of: ".", options: .backwards)?.lowerBound
var substring2 = string2.substring(to: index2!)
Además, no recomendaría desenvolver a la fuerza index2
. Puede utilizar enlace opcional o map
. Personalmente, prefiero usar map
:
var substring3 = index2.map(string2.substring(to:))
Rápido 4
La versión Swift 3 sigue siendo válida, pero ahora puede usar subíndices con rangos de índices:
let string1 = "www.stackoverflow.com"
let index1 = string1.index(string1.endIndex, offsetBy: -4)
let substring1 = string1[..<index1]
El segundo enfoque permanece sin cambios:
let string2 = "www.stackoverflow.com"
let index2 = string2.range(of: ".", options: .backwards)?.lowerBound
let substring3 = index2.map(string2.substring(to:))