2016-06-28 11 views
12

Dies ist mein Code:Inout Parameter in schnellen 3

func removeFromString(_ s: inout String, Character c:Character) -> Int { 
    var s1 = s 
    var nRemoved = 0 

    while let ix = s1.characters.index(of: c) { 
     s1.removeSubrange(ix...ix) 
     nRemoved += 1 

    } 
    return nRemoved 
} 

var s2 = "everest" 

let resb = removeFromString(&s2, Character: Character("e")) 

Mein Problem ist, das soll s2 ändern "VRST" nach s den inout Parameter. Aber es verändert die var s2 überhaupt nicht. Was falsch mache ich? Oder ich erwarte eine falsche Ausgabe? Hilf dabei. Vielen Dank.

Antwort

15

Indem Sie s in s1 verschieben, erstellen Sie eine Kopie davon, da String eine Struktur ist und alle Strukturen Wert übergeben werden. Am Ende ändern Sie nur s1 und nicht die übergebene Zeichenfolge s. Einfach entfernen:

func removeFromString(_ s: inout String, Character c:Character) -> Int { 
    var nRemoved = 0 

    while let ix = s.characters.index(of: c) { 
     s.removeSubrange(ix...ix) 
     nRemoved += 1 

    } 
    return nRemoved 
} 
+1

Perfekt. Vielen Dank! :) – Dershowitz123

+5

Simpler: 's.remove (at: ix)'. –