Swift 在for循环中向字符串追加时,无法对不可变值错误使用mutating member
我使用Swift 在for循环中向字符串追加时,无法对不可变值错误使用mutating member,swift,Swift,我使用var关键字设置了一个可变数组。但是,当尝试对循环使用并修改数组中的每个字符串时,我会收到一个编译错误,说明我无法对不可变值使用mutating member。我可以修改我的数组元素似乎是合乎逻辑的,因为我使用了var关键字。这是如何变得一成不变的?另外,我正在学习数据结构。那么,我可以扩展迭代器协议并使for循环可变吗 var temples = ["blue", "red", "green", "red"] for index in temples { //print(ele
var
关键字设置了一个可变数组。但是,当尝试对循环使用并修改数组中的每个字符串时,我会收到一个编译错误,说明我无法对不可变值使用mutating member。我可以修改我的数组元素似乎是合乎逻辑的,因为我使用了var
关键字。这是如何变得一成不变的?另外,我正在学习数据结构。那么,我可以扩展迭代器协议并使for
循环可变吗
var temples = ["blue", "red", "green", "red"]
for index in temples {
//print(element.uppercased())
//print(element)
index.append(" triangles")
}
由于索引
是for循环中的let
值,因此不能使用
for (ind,value) in temples.enumerated() {
temples[ind] = "\(value) triangles" // +=
}
您的项是不可变的,因为String
是struct
而不是对象,而for in
循环将该值视为let
。如果您使用了可变对象NSMutableString
(类的实例)
),那么这将起作用:
但这并不是纯粹的斯威夫特
即使通过将var
添加到for
循环中使值可变:
var temples = ["blue", "red", "green", "red"]
for var str in temples {
str.append(" triangles")
print(str)
}
print(temples)
它不起作用,因为str
是数组中项的副本,而不是数组中对象的引用,因为String
是struct
,所以修改str
不会更改数组值
那么,在Swift中,您是如何做到这一点的
这里有三种方法:
1。循环数组索引并就地修改项:
循环数组的索引
,并使用该索引直接修改数组中的项:
var temples = ["blue", "red", "green", "red"]
for index in temples.indices {
temples[index].append(" triangles") // or temples[index] += " triangles"
}
print(temples)
2。使用forEach
而不是for
循环:
这也可以使用forEach的实现:
temples.indices.forEach { temples[$0].append(" triangles") }
3。对映射使用功能性方法
:
一种功能性方法是将map
与连接一起使用:
temples = temples.map { $0 + " triangles" }
或字符串
插值:
temples = temples.map { "\($0) triangles" }
@Sh_Khan in展示了一种使用枚举
和字符串插值创建新的字符串
s来替换数组中的字符串,而不是改变数组中的值的方法。并且“index”不是索引:)@DavidBerry an对vampers=D隐藏
["blue triangles", "red triangles", "green triangles", "red triangles"]
temples.indices.forEach { temples[$0].append(" triangles") }
temples = temples.map { $0 + " triangles" }
temples = temples.map { "\($0) triangles" }