首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当附加到for循环中的字符串时,不能在不可变值错误上使用变异成员。

问当附加到for循环中的字符串时,不能在不可变值错误上使用变异成员。
EN

Stack Overflow用户
提问于 2018-08-24 23:19:40
回答 2查看 644关注 0票数 1

我使用var关键字设置了一个可变数组。但是,当尝试使用for循环并修改数组中的每个字符串时,我会得到一个编译错误,说明我不能对不可变值使用变异成员。我可以修改数组元素似乎是合乎逻辑的,因为我使用了var关键字。这怎么变得一成不变的?另外,我正在学习数据结构。那么,我是否可以扩展迭代器协议,并使for循环可变?

代码语言:javascript
复制
var temples = ["blue", "red", "green", "red"]

for index in temples {
    //print(element.uppercased())
    //print(element)
    index.append(" triangles")
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-24 23:38:18

由于index是for循环中的let值,所以不能在其中使用.append,而是需要

代码语言:javascript
复制
for (ind,value) in temples.enumerated()  {
  temples[ind] = "\(value) triangles" // +=
}
票数 2
EN

Stack Overflow用户

发布于 2018-08-25 03:16:43

您的项是不可变的,因为String是struct而不是对象,for-in循环将值视为let。如果您使用了NSMutableString,它是一个可变的对象(class的实例),这是可行的:

代码语言:javascript
复制
var temples: [NSMutableString] = ["blue", "red", "green", "red"]

for str in temples {
    str.append(" triangles")
}

print(temples)

蓝色三角形,红色三角形,绿色三角形,红色三角形

但那不是纯粹的斯威夫特。

即使通过将var添加到for循环使这些值变为可变的:

代码语言:javascript
复制
var temples = ["blue", "red", "green", "red"]

for var str in temples {
    str.append(" triangles")
    print(str)
}

print(temples)

蓝色三角形红色三角形绿色三角形红色三角形“蓝色”、“红色”、“绿色”、“红色”

它不起作用,因为str是数组中项的副本,而不是对数组中对象的引用,因为String是struct,因此修改str不会更改数组值。

你是怎么在斯威夫特做这个的?

以下是三种方法:

1.遍历数组索引并修改适当的项:

循环遍历数组的indices,并使用该索引直接修改数组中的项:

代码语言:javascript
复制
var temples = ["blue", "red", "green", "red"]

for index in temples.indices {
    temples[index].append(" triangles") // or temples[index] += " triangles"
}

print(temples)

“蓝色三角形”、“红色三角形”、“绿色三角形”、“红色三角形”

使用forEach for 而不是for循环:

这也可以使用forEach来完成。

代码语言:javascript
复制
temples.indices.forEach { temples[$0].append(" triangles") }

map**:** 3.在中使用一种功能方法

一种实用的方法是使用带有级联的map:

代码语言:javascript
复制
temples = temples.map { $0 + " triangles" }

或String插值:

代码语言:javascript
复制
temples = temples.map { "\($0) triangles" }

@Sh_Khan in his answer展示了一种使用enumerated和字符串插值来创建新的Strings的方法,以取代数组中的String,而不是修改数组中的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52012767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档