引子
前几天在项目中需要截取字符串,却发现普适的语法在Swift里不适用

看到提示说明我们需要使用String.Index的类型的变量
去文档里看看下标可以接收单个Index
,...
和..<
三种

果然是可以的
那么我们可以扩充下标方法来让我们更舒服的访问字符串,我这里返回值为可选性,以便不会越界
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| extension String { subscript (i: Int) -> Character? { guard i < self.count else { return nil } return self[self.index(self.startIndex, offsetBy: i)] } subscript (r: Range<Int>) -> String? { guard (r.lowerBound >= 0 && r.upperBound <= self.count) else { return nil } let start = index(startIndex, offsetBy: r.lowerBound) let end = index(startIndex, offsetBy: r.upperBound) return String(self[start..<end]) } subscript (r: ClosedRange<Int>) -> String? { guard (r.lowerBound >= 0 && r.upperBound < self.count) else { return nil } let start = index(startIndex, offsetBy: r.lowerBound) let end = index(startIndex, offsetBy: r.upperBound) return String(self[start...end]) } }
|
之后就可以愉快地使用下标了
