如何比较Swift String.Index?

时间:2014-08-06 07:56:38

标签: swift

所以我有一个从搜索方法中获得的Range<String.Index>实例。还有一个独立的String.Index通过其他方式我怎么能告诉这个指数是否在上述范围内?

示例代码:

let str = "Hello!"

let range = Range(start: str.startIndex, end: str.endIndex)
let anIndex = advance(str.startIndex, 3)

// How to tell if `anIndex` is within `range` ?

由于比较运算符不适用于String.Index个实例,唯一的方法似乎是使用advance在字符串中执行循环,但这对于这样一个简单的操作来说似乎有点过分了。

1 个答案:

答案 0 :(得分:5)

beta 5发行说明提到:

  

Range的概念分为三个独立的概念:

     
      
  • 范围,是连续离散ForwardIndexType值的集合。范围用于切片和迭代。
  •   
  • 超过Comparable值的间隔,可以有效地检查遏制。间隔用于交换机中的模式匹配   陈述和~=运营商。
  •   
  • 跨越Strideable值,这些值是可比较的,可以在O(1)中前进任意距离。
  •   

高效的遏制检查是您想要的,这是可能的,因为String.IndexComparable

let range = str.startIndex..<str.endIndex as HalfOpenInterval
// or this:
let range = HalfOpenInterval(str.startIndex, str.endIndex)

let anIndex = advance(str.startIndex, 3)

range.contains(anIndex) // true
// or this:
range ~= anIndex // true

(目前,似乎必须明确命名HalfOpenInterval,否则..<运算符默认会创建RangeRange不支持contains 1}}和~=,因为它仅使用ForwardIndexType。)