斯威夫特3.0
出现此错误:“无法用'string'类型的索引为'[string]'类型的值下标”
当我试图在字符串数组“pokemon”中循环时:
for x in pokemon {
var name: String!
name = pokemon[x]
poke = Pokemon(name: name, pokemonId: x)
pokemons.append(poke)
}
然而,当我写下:
for x in 1..<pokemon.count {
var name: String!
name = pokemon[x]
poke = Pokemon(name: name, pokemonId: x)
pokemons.append(poke)
}
经过研究,似乎“for x in pokemon”使“x”不是一个int,而是一个字符串(实际的数组元素)。
为什么会这样?
最佳答案
在你的第一个循环中,你正在做
for x in pokemon
这会将
pokemon
中的每个值转换为x
。不需要下标
pokemon[x]
,因为x
不是索引,而是元素。当然,你会犯错误,因为:
-
pokemon
是字符串数组-
x
是pokemon
中的元素(使其成为字符串)。在这个循环中,这将在您的代码中发生:
pokemon["snorlax"]
由于数组只能由整数下标,这是无效的。
对于这个循环,只需要
name = x
将当前迭代元素
pokemon
的值强制转换为变量。在第二个循环中,您将遍历一个整数序列(范围)。
for x in 1..<pokemon.count
范围
1..<pokemon.count
给出x
的值1,2,3…等等,每次迭代直到达到小于数组中口袋妖怪数量的1。这是因为您现在将array
pokemon
订阅为整数值x
。在这个循环中,这将在您的代码中发生:
pokemon[1] // contains string "snorlax"`
另外,我不确定这是否是代码中的错误,但将范围从1开始意味着您将排除零索引数组的第一个元素,其中第一个元素为0。
关于arrays - “无法用索引类型为'String'的类型为'[String]'的值下标””,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39927955/