2016-09-15 2 views
8

Offenbar vor Swift 3 hatte eine Range<String.Index> eine count Eigenschaft. Bei der Migration zu Swift 3 habe ich festgestellt, dass diese count Eigenschaft jetzt verschwunden ist. Wie berechne ich den Abstand zwischen 2 String.Index es in Swift 3?Berechne Entfernungszahl in Swift 3

Antwort

12

Ab Swift 3 werden alle Indexberechnungen von der Sammlung selbst durchgeführt, vergleichen SE-0065 – A New Model for Collections and Indices auf Swift Evolution.

Beispiel:

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 
} 

Eigentlich ist Stringnicht eine Sammlung in Swift 3, aber es hat diese Methoden als auch, und sie sind zu den Saiten CharacterView weitergeleitet. Sie das gleiche Ergebnis mit

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

Ab Swift 4, Strings sind Sammlungen (wieder).