【问题标题】:Inout parameters in swift 3swift 3中的inout参数
【发布时间】:2016-06-28 15:28:29
【问题描述】:

这是我的代码:

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。我做错了什么?或者我期待一个错误的输出?帮忙。谢谢。

【问题讨论】:

    标签: ios swift swift3


    【解决方案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
    }
    

    【讨论】:

    • 完美。谢谢! :)
    • 更简单:s.remove(at: ix).
    猜你喜欢
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多