Accès juste en arrière
Le meilleur moyen est d'utiliser substringToIndex
combiné à la endIndex
propriété et à la advance
fonction globale.
var string1 = "www.stackoverflow.com"
var index1 = advance(string1.endIndex, -4)
var substring1 = string1.substringToIndex(index1)
A la recherche d'une corde partant de l'arrière
Utiliser rangeOfString
et régler options
sur.BackwardsSearch
var string2 = "www.stackoverflow.com"
var index2 = string2.rangeOfString(".", options: .BackwardsSearch)?.startIndex
var substring2 = string2.substringToIndex(index2!)
Pas d'extensions, Swift idiomatique pur
Swift 2.0
advance
fait maintenant partie de Index
et est appelé advancedBy
. Vous le faites comme:
var string1 = "www.stackoverflow.com"
var index1 = string1.endIndex.advancedBy(-4)
var substring1 = string1.substringToIndex(index1)
Swift 3.0
Vous ne pouvez pas appeler advancedBy
a String
car il contient des éléments de taille variable. Vous devez utiliser index(_, offsetBy:)
.
var string1 = "www.stackoverflow.com"
var index1 = string1.index(string1.endIndex, offsetBy: -4)
var substring1 = string1.substring(to: index1)
Beaucoup de choses ont été renommées. Les cas sont écrits en camelCase, startIndex
est devenu lowerBound
.
var string2 = "www.stackoverflow.com"
var index2 = string2.range(of: ".", options: .backwards)?.lowerBound
var substring2 = string2.substring(to: index2!)
De plus, je ne recommanderais pas le déballage forcé index2
. Vous pouvez utiliser la liaison facultative ou map
. Personnellement, je préfère utiliser map
:
var substring3 = index2.map(string2.substring(to:))
Swift 4
La version Swift 3 est toujours valide mais vous pouvez désormais utiliser des indices avec des plages d'index:
let string1 = "www.stackoverflow.com"
let index1 = string1.index(string1.endIndex, offsetBy: -4)
let substring1 = string1[..<index1]
La deuxième approche reste inchangée:
let string2 = "www.stackoverflow.com"
let index2 = string2.range(of: ".", options: .backwards)?.lowerBound
let substring3 = index2.map(string2.substring(to:))