2017-09-22 1 views
1

Nur versuchen, das erste Zeichen aus einer Zeichenfolge in Swift zu entfernen. Ich benutze den unten geschriebenen Code, aber die zweite Zeile stürzt meine Anwendung immer wieder ab.String Grundlagen mit Swift

Ist das nicht der richtige Weg, einen String Index auszupacken? Was ist?

var tempText = text 
let toRemove = tempText?.startIndex ?? String.Index(0) 
tempText?.remove(at: toRemove) 
+0

Was der Absturz ist Meldung? Ist die Zeichenfolge leer? – dan

+0

Sie möchten vielleicht https://stackoverflow.com/questions/28445917/what-is-the-most-succinct-way-to-remove-the-first-character-from-a-string-in-swi – rmaddy

Antwort

1

Sie Initialisierung eines String.Index Typ, anstatt sich den Index des tempText String.

Darüber hinaus ist startIndex keine optionale, tempText ist jedoch, ist.

Sie sollten überprüfen, ob tempText existiert und nicht leer ist (Sie können dies einfach mit einem if let tun), und entfernen Sie das Zeichen bei startIndex, wenn es diese Bedingungen erfüllt.

var tempText = text 

if let toRemove = tempText?.startIndex { 
    tempText?.remove(at: toRemove) 
} 
+0

sehen Danke, das hat es perfekt aufgeräumt. So offensichtlich jetzt, dass Sie erklärt * facepalm * – daredevil1234

+0

Jesus, was ist mit all der Kraft auspacken? Sie * haben * bereits eine if-Anweisung, ändern Sie sie einfach in eine bedingte Bindung. – Alexander

+0

@ the4kman Ist es wirklich? 'tempText = tempText? .characters.dropFirst(). map (String.init) ?? tempText' – Alexander

3

können Sie verwenden Sammlung Methode dropFirst:

if let text = text { // you need also to unwrap your optional 
    let tempText = String(text.characters.dropFirst()) // And initialize a new String with your CharacterView 
} 

In Swift 4 String Sammlung entspricht, so dass Sie es direkt auf Ihrem String verwenden:

if let text = text { 
    let tempText = text.dropFirst() // "bc" 
}