swift 3 中的 inout 参数
Inout parameters in swift 3
这是我的代码:
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
。我做错了什么?或者我期待错误的输出?帮忙。谢谢。
通过将 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
}
这是我的代码:
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
。我做错了什么?或者我期待错误的输出?帮忙。谢谢。
通过将 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
}