“无法使用'String'类型的索引下标'[String]'类型的值”

时间:2016-10-08 02:01:02

标签: arrays swift loops

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(实际的数组元素)。 为什么会这样?

1 个答案:

答案 0 :(得分:2)

在你的第一个循环中,你正在做

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 ......等等,直到达到小于数组中Pokemons计数的值。

这是有效的,因为您现在将数组pokemon下标为整数值x

通过此循环,您的代码中会发生这种情况:

pokemon[1] // contains string "snorlax"`

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