Como o String.Index funciona no Swift

Estou atualizando alguns dos meus códigos e respostas antigos com o Swift 3, mas quando cheguei ao Swift Strings e à indexação, foi difícil entender as coisas.

Especificamente, eu estava tentando o seguinte:

let str = "Hello, playground"
let prefixRange = str.startIndex..<str.startIndex.advancedBy(5) // error

onde a segunda linha estava me dando o seguinte erro

'advancedBy' está indisponível: para avançar um índice em n etapas, chame 'index (_: offsetBy :)' na instância do CharacterView que produziu o índice.

eu vejo issoString possui os seguintes métodos.

str.index(after: String.Index)
str.index(before: String.Index)
str.index(String.Index, offsetBy: String.IndexDistance)
str.index(String.Index, offsetBy: String.IndexDistance, limitedBy: String.Index)

Isso realmente estava me confundindo no começo, então comecei a brincar com eles até entendê-los. Estou adicionando uma resposta abaixo para mostrar como eles são usados.

questionAnswers(3)

yourAnswerToTheQuestion