これは私のコードです:
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
をまったく変更していません。私は何が悪いのですか?または、間違った出力を期待していますか?助けてください。ありがとう。
Stringは構造体であり、すべての構造体は値で渡されるため、s
をs1
に移動するとコピーが作成されます。したがって、最終的には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
}