В быстром 3, как вы продвигаете индекс?

Я пытаюсь получить подстроку строки, начиная с индекса 1 в iOS 10 beta 6, и ее головная боль по мере того, как строки swifts постоянно меняются, а большая документация устарела и бесполезна.

У строки есть подстрока (из: Index), но она не может принять целое число (что имело место на некоторое время), поэтому я планировал использовать startIndex и продвигать его на 1, но теперь у индекса нет advanceBy, поэтому я не могу этого сделать:

let aString = "hello"
let subString = aString.substring(from: aString.startIndex.advanceBy(1))

Как получить подстроку из индекса 1? Как вы можете продвигать индекс в эти дни, и какова точка метода подстроки (из индекса) - как вы должны его использовать?

Ответы

Ответ 1

Выглядит довольно ясно, как первый элемент в Руководство по миграции Swift 3:

Наиболее заметным изменением является то, что индексы больше не имеют методов successor(), predecessor(), advancedBy(_:), advancedBy(_:limit:) или distanceTo(_:). Вместо этого эти операции перемещаются в коллекцию, которая теперь отвечает за увеличение и уменьшение своих индексов.

myIndex.successor()  =>  myCollection.index(after: myIndex)
myIndex.predecessor()  =>  myCollection.index(before: myIndex)
myIndex.advance(by: …) => myCollection.index(myIndex, offsetBy: …)

Итак, похоже, что вы хотите что-то вроде:

let greeting = "hello"
let secondCharIndex = greeting.index(after: greeting.startIndex)
let enryTheEighthGreeting = greeting.substring(from: secondCharIndex) // -> "ello"

(Заметим также, что если вы хотите Collection функционировать как управление индексами - на String, иногда помогает использовать characters view. String методы, такие как startIndex и index(after:), являются просто удобствами, которые переходят к представлению characters. Эта часть не является новой, хотя... String перестает быть Collection самостоятельно в Swift 2 IIRC.)

Более подробно об индексах коллекции в SE-0065 - новая модель для коллекций и индексов.

Ответ 2

Swift 3:

let str = "hello"
let subStr = str.substring(from:str.index(str.startIndex,offsetBy: 1))
print(subStr)//ello

Менее подробное решение:

print(str.substring(from:str.idx(index)))//ello
extension String{
    func idx(_ index:Int) -> String.Index{
        return self.index(self.startIndex, offsetBy: index)
    }
}