在Swift 3中计算射程计数

在Swift 3中计算射程计数,swift,swift3,Swift,Swift3,显然在Swift 3之前,范围具有计数属性。在迁移到Swift 3时,我注意到这个count属性现在不存在了。如何计算Swift 3中2String.Indexes之间的距离?自Swift 3起,所有索引计算均由集合本身完成, 比较一下快速进化 例如: let string = "abc 1234 def" if let range = string.range(of: "\\d+", options: .regularExpression) {

显然在Swift 3之前,
范围
具有
计数
属性。在迁移到Swift 3时,我注意到这个
count
属性现在不存在了。如何计算Swift 3中2
String.Index
es之间的距离?

自Swift 3起,所有索引计算均由集合本身完成, 比较一下快速进化

例如:

let string = "abc 1234 def"
if let range = string.range(of: "\\d+", options: .regularExpression) {
    let count = string.distance(from: range.lowerBound, to: range.upperBound)
    print(count) // 4
}
实际上,
String
不是Swift 3中的集合,但它有这些方法 它们也会被转发到字符串
CharacterView
。 你会得到同样的结果

let count = string.characters.distance(from: range.lowerBound, to: range.upperBound)

从Swift 4开始,字符串是集合(再次)。

这在Swift 5中是否发生了变化或变得更简单?@意义很重要:否。-有一个(据我所知)旨在简化索引/偏移计算的方法,但这仍然是一个问题。