Входящие параметры в swift 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"))

Моя проблема заключается в том, что предполагается использовать s2 для "vrst" после использования параметра inout s. Но он вообще не изменяет var s2. Что плохого я делаю? Или я ожидаю неправильного вывода? Помогите. Спасибо.

Ответ 1

Переместив s в s1, вы делаете копию, так как String является структурой, и все структуры передаются по значению. Поэтому в итоге вы меняете s1, а не переданную строку, s. Просто удалите его:

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
}