'init (start: end :)' ist veraltet: Es wird in Swift 3 entfernt. Verwenden Sie den Operator '.. <'


72

Ich verwende den folgenden Code:

var continousDigitsRange:Range<Int> = Range<Int>(start: 0, end: 0)

Seit dem Update auf Xcode 7.3 (Swift 2.2) habe ich folgenden Hinweis erhalten:

'init (start: end :)' ist veraltet: Es wird in Swift 3 entfernt. Verwenden Sie den Operator '.. <'.

Für mich ist nicht klar, wie man es mit "mit dem Operator '.. <' richtig" übersetzt ".


für Artikel in 0 .. <Artikel {} für Artikel in 0 ... 100 {}
Anton

Antworten:


88

Du solltest einfach schreiben

var continousDigitsRange1:Range<Int> = 0..<0

oder wenn Sie noch einfacher gehen möchten

var continousDigitsRange = 0..<0

35

Erwähnenswert ist auch, dass Sie substringWithRangeeinen String jetzt verwenden können

let theString = "Hello, how are you"
let range = theString.startIndex.advancedBy(start) ..< theString.startIndex.advancedBy(end)
theString.substringWithRange(range)

1
Eine kleine Sache ist, dass Sie, wenn Sie vom Ende der Zeichenfolge aus zählen, endIndex verwenden, anstatt wie unten zu beginnen: 'let range = theString.startIndex.advancedBy (start) .. <theString.endIndex.advancedBy (end)'
Hamid

8

Der Operator (a...b)für geschlossene Bereiche definiert einen Bereich von a bis b und enthält die Werte a und b. Der Wert von a darf nicht größer als b sein.

Der Operator (a..<b)für halboffene Bereiche definiert einen Bereich, der von a bis b reicht, b jedoch nicht enthält. Es soll halb offen sein, weil es seinen ersten Wert enthält, aber nicht seinen endgültigen Wert. Wie beim Operator für geschlossene Bereiche darf der Wert von a nicht größer als b sein. Wenn der Wert von a gleich b ist, ist der resultierende Bereich leer.

Die Swift-Programmiersprache (Swift 2.2) - Grundlegende Operatoren

var continousDigitsRange:Range<Int> = Range<Int>(start: 0, end: 0)
--to--
var continousDigitsRange:Range<Int> = 0..<0

1
Ahh, ja, guter Punkt, habe es aufgedreht - wollte die Reichweitenoptionen schnell veranschaulichen.
Magnet

Was endet in ContinuousDigitsRange? Sieht für mich wie eine Null aus. Welchen Nutzen könnte dieser Bereich haben? Ich versuche auch zu lernen!
user462990

2

um bmichottes Antwort vollständig zu zeigen ...

let theString = "Hello, how are you today my friend"
    let start = 3
    let end = 15
    let range = theString.startIndex.advancedBy(start) ..< theString.startIndex.advancedBy(end)
    let p = theString.substringWithRange(range)
    print("this is the middle bit>\(p)<")

Dies erzeugt das mittlere Bit> lo, wie geht es <


1

Hinzufügen einiger Punkte in Bezug auf Swift 3.0

// Beispiel für einen zählbaren Bereich.

let range1 = 0..<5

Beispiel für einen zählbaren geschlossenen Bereich

let range2 = 0...5

// Bereich von Grenzen

let range = Range(uncheckedBounds: (range1.lowerBound,range1.upperBound))

// Um ​​den Abstand von substringRange zu ermitteln.

let str = "Hello, how are you"
let substringRange = str.characters.indices

// Unter Swift 3.0

let length = substringRange.distance(from: substringRange.startIndex, to: substringRange.endIndex)

// Für Swift 3.0

let length2 = str.distance(from: substringRange.startIndex, to: substringRange.endIndex)

1

Ich hatte immer eine Funktion, um den Teilstring-Bereich eines Strings abzurufen. Hier ist meine aktualisierte Funktion für Swift 3:

func getSubStringRange(fullString: String, fromIndex: Int, subStringSize: Int) -> Range<String.Index> {
    let startIndex = fullString.characters.index(fullString.startIndex, offsetBy: fromIndex)
    let endIndex = fullString.characters.index(startIndex, offsetBy: subStringSize)

    let subStringRange = startIndex..<endIndex

    return subStringRange
}

Die Funktion ist ziemlich selbsterklärend - Sie übergeben einen String (fullString), den Index des Strings, an dem der Teilstring beginnt (fromIndex) und wie groß der SubString ist (subStringSize).

Beispiel:

let greeting = "Hi, my name is Nathaniel"
let getName = greeting[getSubStringRange(fullString: greeting, fromIndex: 15, subStringSize: 9)]

print("Name: \(getName)")

-> Drucke: "Name: Nathaniel"


1
Kompiliert nicht mit Swift 3. Es gibt kein Schließen )nachsubStringSize: Int
Vladislav

1
Auf dem endIndexGrundstück, das Sie fullString.zuvor verpasst haben startIndex, wäre das Richtige:let endIndex = fullString.characters.index(fullString.startIndex, offsetBy: subStringSize)
Mette

Danke Leute. Ich muss geschlafen haben, als ich das getippt habe! Ich musste das ganze Los manuell eingeben und nicht direkt aus meinem Code kopieren / einfügen, da ich mich beim Posten auf einem Windows-PC befand!
Krivvenz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.