swift 3中的inout参数

Posted

技术标签:

【中文标题】swift 3中的inout参数【英文标题】:Inout parameters in swift 3 【发布时间】: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。我做错了什么?或者我期待一个错误的输出?帮忙。谢谢。

【问题讨论】:

【参考方案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).

以上是关于swift 3中的inout参数的主要内容,如果未能解决你的问题,请参考以下文章

如何解决转义闭包捕获 Swift 中的“inout”参数?

Swift 3.0 错误:转义闭包只能按值显式捕获 inout 参数

MySQL 存储过程传参之in, out, inout 参数用法

创建存储过程 in,out,inout

Swift 5:转义闭包捕获'inout'参数

Spring Boot invalidDataAccessApiUsageException - OUT/INOUT 参数不可用