斯威夫特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是字符串数组
-xpokemon中的元素(使其成为字符串)。
在这个循环中,这将在您的代码中发生:
pokemon["snorlax"]

由于数组只能由整数下标,这是无效的。
对于这个循环,只需要
name = x

将当前迭代元素pokemon的值强制转换为变量。
在第二个循环中,您将遍历一个整数序列(范围)。
for x in 1..<pokemon.count

范围1..<pokemon.count给出x的值1,2,3…等等,每次迭代直到达到小于数组中口袋妖怪数量的1。
这是因为您现在将arraypokemon订阅为整数值x
在这个循环中,这将在您的代码中发生:
pokemon[1] // contains string "snorlax"`

另外,我不确定这是否是代码中的错误,但将范围从1开始意味着您将排除零索引数组的第一个元素,其中第一个元素为0。

关于arrays - “无法用索引类型为'String'的类型为'[String]'的值下标””,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39927955/

10-14 10:28