Dostęp do wstecz
Najlepszym sposobem jest użycie substringToIndex
kombinacji do endIndex
właściwości i advance
funkcji globalnej.
var string1 = "www.stackoverflow.com"
var index1 = advance(string1.endIndex, -4)
var substring1 = string1.substringToIndex(index1)
Szukam sznurka zaczynającego się od tyłu
Użyj rangeOfString
i ustaw options
na.BackwardsSearch
var string2 = "www.stackoverflow.com"
var index2 = string2.rangeOfString(".", options: .BackwardsSearch)?.startIndex
var substring2 = string2.substringToIndex(index2!)
Bez rozszerzeń, czysty idiomatyczny Swift
Swift 2.0
advance
jest teraz częścią Index
i nazywa się advancedBy
. Robisz to jak:
var string1 = "www.stackoverflow.com"
var index1 = string1.endIndex.advancedBy(-4)
var substring1 = string1.substringToIndex(index1)
Swift 3.0
Nie możesz wywołać advancedBy
a, String
ponieważ zawiera elementy o zmiennej wielkości. Musisz użyć index(_, offsetBy:)
.
var string1 = "www.stackoverflow.com"
var index1 = string1.index(string1.endIndex, offsetBy: -4)
var substring1 = string1.substring(to: index1)
Wiele rzeczy zostało przemianowanych. Sprawy są napisane w camelCase, startIndex
stało się lowerBound
.
var string2 = "www.stackoverflow.com"
var index2 = string2.range(of: ".", options: .backwards)?.lowerBound
var substring2 = string2.substring(to: index2!)
Nie polecałbym też rozpakowywania na siłę index2
. Możesz użyć opcjonalnego łączenia lub map
. Osobiście wolę używać map
:
var substring3 = index2.map(string2.substring(to:))
Szybki 4
Wersja Swift 3 jest nadal aktualna, ale teraz możesz używać indeksów dolnych z zakresami indeksów:
let string1 = "www.stackoverflow.com"
let index1 = string1.index(string1.endIndex, offsetBy: -4)
let substring1 = string1[..<index1]
Drugie podejście pozostaje niezmienione:
let string2 = "www.stackoverflow.com"
let index2 = string2.range(of: ".", options: .backwards)?.lowerBound
let substring3 = index2.map(string2.substring(to:))