Ich habe gerade Xcode auf 8.0 Beta 2 und Swift 3.0 aktualisiert. Nach dem Update von swift 2.3 bekomme ich viele Fehler.Swift 3; Reichweite 'Out of Bounds'
Ich habe eine String-Erweiterung, die eine Reichweite im "Selbst" -string zu einem NSRange Converting:
extension String {
func NSRangeFromRange(_ range : Range<String.Index>) -> NSRange {
let utf16view = self.utf16
let from = String.UTF16View.Index(range.lowerBound, within: utf16view)
let to = String.UTF16View.Index(range.upperBound, within: utf16view)
print("to: \(to) from: \(from)")
print(self.characters.count)
return NSMakeRange(utf16view.startIndex.distance(to: from), from.distance(to: to))
// return NSMakeRange(0, 0) // <-- removes exception
}
}
Wenn NSMakeRange ausgeführt wird, ich bin eine Störung zu erhalten:
Terminating app due to uncaught exception 'NSRangeException', reason: 'NSMutableRLEArray objectAtIndex:effectiveRange:: Out of bounds'
wenn ich die to- bin Druck und aus-Index ist, erhalte ich:
to: Index(_offset: 194) from: Index(_offset: 181)
die Zeichenzahl des String ist 210
, die ungefähr richtig scheint.
Also, ich verstehe nicht, warum es mir sagt, dass der Index außerhalb der Grenzen sind, wenn sie weniger als die Gesamtzahl sind.
Diese Linie wurde perfekt funktioniert, bevor ich es sah aus wie das damals zu swift 3. aktualisiert:
return NSMakeRange(utf16view.startIndex.distanceTo(from), from.distanceTo(to))
Der Auto-Konverter nicht die Syntax von swift 2,3-3,0 aktualisiert wurde, habe ich das ist selbst.
Irgendwelche Hinweise?
ich den 'Bereich' '<-> NSRange' Konverter unter http aktualisiert: // stackov erflow.com/a/30404532/1187415 für Swift 3, hilft das? –
Super .. Sie rocken.! So fand ich heraus, dass das Problem darin bestand, dass NSMakeRange Argumente von und zu nahm, wobei es wie in swift 3 Argumente von und Länge braucht. Dies verursachte die Ausnahmebedingung Ausnahme. – Wiingaard
Ich glaube nicht, dass NSMakeRange das Problem ist, das immer loc/len Parameter genommen hat. –