inift参数在swift 3中

Der*_*123 12 ios swift swift3

这是我的代码:

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"))
Run Code Online (Sandbox Code Playgroud)

我的问题是这应该在使用参数后将s2更改为"vrst".但它根本没有改变它.我在做什么错了?或者我期待错误的输出?帮忙.谢谢.inoutsvar s2

Luk*_*uke 18

通过移动ss1要制作一个副本,因为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
}
Run Code Online (Sandbox Code Playgroud)

  • 更简单:`s.remove(at:ix)`. (5认同)