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 3.0 错误:转义闭包只能按值显式捕获 inout 参数
MySQL 存储过程传参之in, out, inout 参数用法
Spring Boot invalidDataAccessApiUsageException - OUT/INOUT 参数不可用