2015-01-29 21 views

Antwort

10

Während String-Indizes sind nicht random-access und sind nicht Zahlen, können Sie sie durch eine Reihe, um voran die n-te Zeichen zuzugreifen:

var s = "Hello, I must be going" 

s.removeAtIndex(advance(s.startIndex, 5)) 

println(s) // prints "Hello I must be going" 

Natürlich sollten Sie immer die Zeichenfolge überprüfen ist mindestens 5 in der Länge, bevor Sie dies tun!

edit: wie @MartinR darauf hinweist, können Sie die mit-End-Index-Version voraus verwenden, um die Gefahr zu laufen, vorbei am Ende zu vermeiden:

let index = advance(s.startIndex, 5, s.endIndex) 
if index != s.endIndex { s.removeAtIndex(index) } 

Wie immer sind optionals Freund:

// find returns index of first match, 
// as an optional with nil for no match 
if let idx = s.characters.index(of:",") { 
    // this will only be executed if non-nil, 
    // idx will be the unwrapped result of find 
    s.removeAtIndex(idx) 
} 
+1

Anstatt die Länge * im Voraus * Überprüfung, kann man alternativ verwenden 'lassen index = Fortschritt (s.startIndex, 5, s.endIndex); if index! = s.endIndex {s.removeAtIndex (index)} '. –

+0

Großartiger Punkt. In gewisser Weise wäre es nett, wenn das ein optionales ähnlich wie 'find' zurückliefert, aber ich denke, das würde bedeuten, dass es in Fällen weniger nützlich wäre, in denen" end "ein legitimer Index ist, den Sie lieber als das Ende einschließen möchten -index Sentinel. –

+0

Ja. [Hier] (http://stackoverflow.com/a/26691258/1187415) ist ein einfaches Beispiel, in dem die Tatsache verwendet wird, dass diese 'advance()' Methode einen gültigen (nicht-optionalen) Index zurückgibt. –

0

var hello = "hello world!"

Lassen Sie uns sagen, dass wir das "w" entfernen möchten. (Es befindet sich an der 6. Indexposition.)

Zuerst: Erstellen Sie einen Index für diese Position. (Ich mache den Rückgabetyp Index explizit; es ist nicht erforderlich).

let index:Index = hello.startIndex.advancedBy(6)

Zweitens: Rufen Sie removeAtIndex() und es unsere Just-gemacht-Index übergeben. (Beachten Sie den Charakter in Frage zurück)

let choppedChar:Character = hello.removeAtIndex(index)

print(hello) // druckt hallo elt!

print(choppedChar) // druckt w

Verwandte Themen