2016-06-28 3 views
12

Это мой код:параметров Inout в быстром 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» после использования параметра sinout. Но он вообще не изменяет var s2. Что плохого я делаю? Или я ожидаю неправильного вывода? Помогите. Благодарю.

ответ

15

Переместив 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 
} 
+1

Perfect. Благодаря! :) – Dershowitz123

+5

Проще: 's.remove (at: ix)'. –

Смежные вопросы