Swift Range技术问题:如何获取指定索引后首元素起始的范围?
Swift获取跳过指定索引的范围(不包含首个元素/从指定索引下一个开始)
嘿,这个问题我之前刚琢磨过!Swift的范围操作符确实有点绕,尤其是这种要跳过起始元素的场景~你试的index<..确实不是Swift的合法语法,咱们用正确的方式就能搞定:
核心思路
你要的是从指定索引的下一个元素开始,一直到序列末尾的范围对吧?本质上就是先拿到目标索引的「下一个位置」,再基于这个位置构建到结尾的范围。
具体实现方法
方法1:用index(after:)配合后缀闭范围操作符
如果你已经有一个目标索引targetIndex,可以先通过index(after:)拿到它的下一个位置,再用...后缀操作符表示从该位置到末尾的所有元素:
let myStr = "Hello, World!" // 先找到目标索引(比如逗号的位置) if let targetIndex = myStr.firstIndex(of: ",") { // 获取目标索引的下一个位置 let startFromNext = myStr.index(after: targetIndex) // 从该位置到末尾的子串 let substr = myStr[startFromNext...] print(substr) // 输出:" World!" }
如果是要直接跳过第一个元素,就把目标索引换成字符串的startIndex就行:
let myStr = "Hello" let skipFirstChar = myStr[myStr.index(after: myStr.startIndex)...] print(skipFirstChar) // 输出:"ello"
方法2:构造半开范围(和你熟悉的..<对应)
如果你更习惯用半开范围的写法,也可以明确写出到endIndex的范围(endIndex是序列最后一个元素之后的位置,所以start..<endIndex刚好包含从start到最后一个元素的所有内容):
let substr = myStr[startFromNext..<myStr.endIndex]
这个写法和方法1的startFromNext...效果完全一致,选你顺手的就行~
为啥index<..不行?
Swift的范围操作符是有固定语法的:
- 前缀操作符(
..<index/...index):表示从序列开头到指定索引的范围 - 后缀操作符(
index...):表示从指定索引到序列末尾的闭范围
后缀的半开范围(index..<)是不合法的,因为没法明确它的结束位置,所以必须像方法2那样指定endIndex才行。
内容的提问来源于stack exchange,提问作者black
相关产品推荐
相关产品推荐

