Ответ 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 - новая модель для коллекций и индексов.