Einfach rückwärts zugreifen
Der beste Weg ist, substringToIndex
kombiniert mit dem zu verwendenendIndex
Eigenschaft und der advance
globalen Funktion.
var string1 = "www.stackoverflow.com"
var index1 = advance(string1.endIndex, -4)
var substring1 = string1.substringToIndex(index1)
Auf der Suche nach einer Saite von hinten
Verwenden rangeOfString
und einstellen options
auf.BackwardsSearch
var string2 = "www.stackoverflow.com"
var index2 = string2.rangeOfString(".", options: .BackwardsSearch)?.startIndex
var substring2 = string2.substringToIndex(index2!)
Keine Erweiterungen, reine Redewendung Swift
Swift 2.0
advance
ist jetzt ein Teil von Index
und heißt advancedBy
. Du machst es wie:
var string1 = "www.stackoverflow.com"
var index1 = string1.endIndex.advancedBy(-4)
var substring1 = string1.substringToIndex(index1)
Swift 3.0
Sie können nicht nennen advancedBy
auf eine , String
weil sie variabler Größe Elemente. Du musst benutzen index(_, offsetBy:)
.
var string1 = "www.stackoverflow.com"
var index1 = string1.index(string1.endIndex, offsetBy: -4)
var substring1 = string1.substring(to: index1)
Viele Dinge wurden umbenannt. Die Fälle sind in camelCase geschrieben, startIndex
wurden lowerBound
.
var string2 = "www.stackoverflow.com"
var index2 = string2.range(of: ".", options: .backwards)?.lowerBound
var substring2 = string2.substring(to: index2!)
Außerdem würde ich nicht empfehlen, das Auspacken zu erzwingen index2
. Sie können die optionale Bindung oder verwenden map
. Persönlich bevorzuge ich map
:
var substring3 = index2.map(string2.substring(to:))
Swift 4
Die Swift 3-Version ist noch gültig, aber jetzt können Sie Indizes mit Indexbereichen verwenden:
let string1 = "www.stackoverflow.com"
let index1 = string1.index(string1.endIndex, offsetBy: -4)
let substring1 = string1[..<index1]
Der zweite Ansatz bleibt unverändert:
let string2 = "www.stackoverflow.com"
let index2 = string2.range(of: ".", options: .backwards)?.lowerBound
let substring3 = index2.map(string2.substring(to:))