web-dev-qa-db-ja.com

Swift 3のInoutパラメータ

これは私のコードです:

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"))

私の問題は、inoutパラメータsを使用した後、s2を"vrst"に変更することになっていることです。しかし、それはvar s2をまったく変更していません。私は何が悪いのですか?または、間違った出力を期待していますか?助けてください。ありがとう。

12
Dershowitz123

Stringは構造体であり、すべての構造体は値で渡されるため、ss1に移動するとコピーが作成されます。したがって、最終的には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
}
18
Luke