upperBound lowerBound
https://www.jianshu.com/p/022f632e89bd
Range的使用
https://www.cnblogs.com/horo/p/7047150.html
'区间'
var myString = "abcde"
let start = myString.index(myString.startIndex, offsetBy: 1) //b 从第一个位置向右偏移一个位置
let end = myString.index(myString.startIndex, offsetBy: 4) //e
let myRange = start..<end //range<String.Index> 代表一个索引区间
let newStr = myString[myRange] //新写法 "bcd"
myString.substring(with: myRange) // "bcd"
String.Index -> 索引类型
let name = "rgb(51,51,51)"
let index = name.endIndex
let indexN = name.endIndex.encodedOffset //13 该字符的位置 encodedOffset (Int 类型)
每一个String值都有一个关联的索引(index)类型,String.Index,它对应着字符串中的每一个Character的位置