Swift中如何将ClosedRange<Int>.Index转换为Int类型?
如何将ClosedRange.Index转换为Int类型?
问题描述
我编写了以下Swift代码:
let range = 30...200 // 范围的上下界可能动态变化 let index = range.firstIndex(of: 55)
现在index的类型是ClosedRange<Int>.Index,我不清楚如何将它转换成Int类型以用于后续逻辑。我知道把范围转成数组后再查找Int类型的索引更简单,但应该可以直接处理ClosedRange<Int>.Index本身。
解决方案
根据实际需求,有两种可行的处理方式:
1. 获取索引对应的元素值
ClosedRange<Int>.Index本质是Int的类型别名,直接做类型转换就能得到目标Int值:
let range = 30...200 if let index = range.firstIndex(of: 55) { let intValue = index as Int // intValue即为55,可直接使用 }
也可以通过范围下标直接访问元素,效果完全相同:
if let index = range.firstIndex(of: 55) { let intValue = range[index] }
2. 计算相对于范围起点的偏移量
如果需要的是元素在范围内的偏移位置(例如30对应偏移0,55对应偏移25),使用distance(from:to:)方法即可:
let range = 30...200 if let index = range.firstIndex(of: 55) { let offset = range.distance(from: range.startIndex, to: index) // offset的值为25 }
内容的提问来源于stack exchange,提问作者Gargo
相关产品推荐
相关产品推荐

