extension String.CharacterView {
func read(_ i: Int) -> Character {
let index = self.index(startIndex, offsetBy: i)
return self[index]
}
func read(_ range: Range<Int>) -> String.CharacterView {
let start = self.index(startIndex, offsetBy: range.lowerBound)
let end = self.index(start, offsetBy: range.count)
return self[start..<end]
}
func read(_ range: ClosedRange<Int>) -> String.CharacterView {
let start = self.index(startIndex, offsetBy: range.lowerBound)
let end = self.index(start, offsetBy: range.count - 1)
return self[start...end]
}
}
let s = "12345"
s.characters.read(1)
// → 2
String(s.characters.read(1..<3))
// → 23
String(s.characters.read(1...3))
// → 234