如何让Swift中的$0变为可变?数组元素替换报错问题问询
问题原因与解决办法
首先得明确:$0是闭包的不可变参数,Swift里闭包的简写参数($0、$1这类)默认都是let常量,所以你没法给它赋值,这就是编译器报错的核心原因。
而map方法的作用是遍历数组的每个元素,根据传入的闭包返回一个新值,最终构建出一个全新的数组——它不需要你修改原元素,只需要你返回替换后的结果就行。所以你的代码只要改一点点就好:
let replace = ["123","87","123","765","som","123","op","123"].map { $0 == "123" ? "replace" : $0 }
把原来的$0 = "replace"改成直接返回"replace"就搞定了,因为三元运算符的作用是返回两个分支中的一个值,而不是赋值。
如果你非要在闭包里用可变变量来操作(虽然没必要,这里只是演示),也可以手动把$0赋值给一个var变量再修改:
let replace = ["123","87","123","765","som","123","op","123"].map { var mutableStr = $0 if mutableStr == "123" { mutableStr = "replace" } return mutableStr }
但显然第一种写法更简洁,也更符合map方法的设计初衷。
内容的提问来源于stack exchange,提问作者whok mok
相关产品推荐
相关产品推荐

