Просто доступ назад
Найкращим способом є використання substringToIndex
комбінованого до endIndex
властивості та advance
глобальної функції.
var string1 = "www.stackoverflow.com"
var index1 = advance(string1.endIndex, -4)
var substring1 = string1.substringToIndex(index1)
Шукаєте рядок, починаючи зі зворотного боку
Використовуйте rangeOfString
та встановіть options
на.BackwardsSearch
var string2 = "www.stackoverflow.com"
var index2 = string2.rangeOfString(".", options: .BackwardsSearch)?.startIndex
var substring2 = string2.substringToIndex(index2!)
Ніяких розширень, чисто ідіоматичний Свіфт
Швидкий 2.0
advance
зараз є частиною Index
і називається advancedBy
. Ви робите це так:
var string1 = "www.stackoverflow.com"
var index1 = string1.endIndex.advancedBy(-4)
var substring1 = string1.substringToIndex(index1)
Swift 3.0
Ви не можете зателефонувати advancedBy
на, String
оскільки він містить елементи змінного розміру Ви повинні використовувати index(_, offsetBy:)
.
var string1 = "www.stackoverflow.com"
var index1 = string1.index(string1.endIndex, offsetBy: -4)
var substring1 = string1.substring(to: index1)
Багато речей було перейменовано. Справи написані camelCase, startIndex
став lowerBound
.
var string2 = "www.stackoverflow.com"
var index2 = string2.range(of: ".", options: .backwards)?.lowerBound
var substring2 = string2.substring(to: index2!)
Також я б не рекомендував примусово розкручувати index2
. Можна використовувати необов'язкове зв'язування або map
. Особисто я вважаю за краще використовувати map
:
var substring3 = index2.map(string2.substring(to:))
Швидкий 4
Версія Swift 3 досі діє, але тепер ви можете використовувати підписки з діапазонами індексів:
let string1 = "www.stackoverflow.com"
let index1 = string1.index(string1.endIndex, offsetBy: -4)
let substring1 = string1[..<index1]
Другий підхід залишається незмінним:
let string2 = "www.stackoverflow.com"
let index2 = string2.range(of: ".", options: .backwards)?.lowerBound
let substring3 = index2.map(string2.substring(to:))