Hanya mengakses mundur
Cara terbaik adalah menggunakan substringToIndexgabungan endIndexproperti dan advancefungsi global.
var string1 = "www.stackoverflow.com"
var index1 = advance(string1.endIndex, -4)
var substring1 = string1.substringToIndex(index1)
Mencari senar dimulai dari belakang
Gunakan rangeOfStringdan setel optionske.BackwardsSearch
var string2 = "www.stackoverflow.com"
var index2 = string2.rangeOfString(".", options: .BackwardsSearch)?.startIndex
var substring2 = string2.substringToIndex(index2!)
Tanpa ekstensi, Swift idiomatik murni
Swift 2.0
advancesekarang menjadi bagian dari Indexdan disebut advancedBy. Anda melakukannya seperti:
var string1 = "www.stackoverflow.com"
var index1 = string1.endIndex.advancedBy(-4)
var substring1 = string1.substringToIndex(index1)
Swift 3.0.0
Anda tidak dapat memanggil advancedBypada Stringkarena memiliki unsur ukuran variabel. Anda harus menggunakan index(_, offsetBy:).
var string1 = "www.stackoverflow.com"
var index1 = string1.index(string1.endIndex, offsetBy: -4)
var substring1 = string1.substring(to: index1)
Banyak hal telah diubah namanya. Kasus-kasus tersebut ditulis dalam camelCase, startIndexmenjadi lowerBound.
var string2 = "www.stackoverflow.com"
var index2 = string2.range(of: ".", options: .backwards)?.lowerBound
var substring2 = string2.substring(to: index2!)
Juga, saya tidak akan merekomendasikan buka paksa index2. Anda dapat menggunakan penjilidan opsional atau map. Secara pribadi, saya lebih suka menggunakan map:
var substring3 = index2.map(string2.substring(to:))
Cepat 4
Versi Swift 3 masih valid tetapi sekarang Anda sekarang dapat menggunakan langganan dengan rentang indeks:
let string1 = "www.stackoverflow.com"
let index1 = string1.index(string1.endIndex, offsetBy: -4)
let substring1 = string1[..<index1]
Pendekatan kedua tetap tidak berubah:
let string2 = "www.stackoverflow.com"
let index2 = string2.range(of: ".", options: .backwards)?.lowerBound
let substring3 = index2.map(string2.substring(to:))