Accesso solo all'indietro
Il modo migliore è usare substringToIndex
combinato con la endIndex
proprietà e la advance
funzione globale.
var string1 = "www.stackoverflow.com"
var index1 = advance(string1.endIndex, -4)
var substring1 = string1.substringToIndex(index1)
Alla ricerca di una corda che inizi dal retro
Usa rangeOfString
e imposta options
su.BackwardsSearch
var string2 = "www.stackoverflow.com"
var index2 = string2.rangeOfString(".", options: .BackwardsSearch)?.startIndex
var substring2 = string2.substringToIndex(index2!)
Nessuna estensione, puro idiomatico Swift
Swift 2.0
advance
fa ora parte di Index
ed è chiamato advancedBy
. Ti piace:
var string1 = "www.stackoverflow.com"
var index1 = string1.endIndex.advancedBy(-4)
var substring1 = string1.substringToIndex(index1)
Swift 3.0
Non puoi chiamare advancedBy
a String
perché ha elementi di dimensioni variabili. Devi usare index(_, offsetBy:)
.
var string1 = "www.stackoverflow.com"
var index1 = string1.index(string1.endIndex, offsetBy: -4)
var substring1 = string1.substring(to: index1)
Molte cose sono state rinominate. I casi sono scritti in camelCase, è startIndex
diventato lowerBound
.
var string2 = "www.stackoverflow.com"
var index2 = string2.range(of: ".", options: .backwards)?.lowerBound
var substring2 = string2.substring(to: index2!)
Inoltre, non consiglierei lo scartamento forzato index2
. È possibile utilizzare l'associazione facoltativa o map
. Personalmente preferisco usare map
:
var substring3 = index2.map(string2.substring(to:))
Swift 4
La versione Swift 3 è ancora valida, ma ora puoi utilizzare pedici con intervalli di indici:
let string1 = "www.stackoverflow.com"
let index1 = string1.index(string1.endIndex, offsetBy: -4)
let substring1 = string1[..<index1]
Il secondo approccio rimane invariato:
let string2 = "www.stackoverflow.com"
let index2 = string2.range(of: ".", options: .backwards)?.lowerBound
let substring3 = index2.map(string2.substring(to:))