Swift 3.0
出现此错误:“无法使用”String“类型的索引下标类型'[String]'的值”
当我试图遍历Strings的数组“口袋妖怪”时:
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,而是String(实际的数组元素)。 为什么会这样?
答案 0 :(得分:2)
在你的第一个循环中,你正在做
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 ......等等,直到达到小于数组中Pokemons计数的值。
这是有效的,因为您现在将数组pokemon
下标为整数值x
。
通过此循环,您的代码中会发生这种情况:
pokemon[1] // contains string "snorlax"`
另外,我不确定这是否是您的代码中的错误,但是将范围从1开始意味着您将排除零索引数组的第一个元素,其中第一个元素为0。