如何从swift 3中的数组中正确获取元素?

时间:2017-01-15 13:33:54

标签: arrays swift for-loop swift3

我正在尝试使用swift 3与玩家和计算机进行一次tic tac toe游戏,我发现循环数组与其他语言完全不同。我试图选择等于0(可用)的位置(索引)。 gameState表示板上的空间从0到8(9个空格)作为0的数组。假设gameState看起来像游戏板位置:[1,2,1,0,0,0,0,0],那么我希望它检查下一个可用空间,即gameState [3]。

            for (position,element) in gameState.enumerated() {
                if gameState[element] == 0 && activeComp {
                    takeSpace = gameState[position] + 1
                    print("in gameState[element] is: ", gameState[element])
                    print("in place gameState[position] is: ", gameState[position], "game board positions :", gameState )
                    activeComp = false
                }
                print(position, element, gameState[element])
            }

上述代码的输出类似于:

0 1 2

gameState [element]中的

是:0 在位游戏状态[位置]是:2个游戏板位置:[1,2,0,0,0,0,0,0,0]

1 2 0

2 0 1

3 0 1

4 0 1

5 0 1

6 0 1

7 0 1

8 0 1

它正确地打印出位置和元素,但是一旦我想使用for循环获取gameState [element],就会打印出异类的东西。

2 个答案:

答案 0 :(得分:0)

问题是您没有正确订阅数组。看起来你犯了一个拼写错误,并使用数组的值意外索引。所以,而不是:

 for (position,element) in gameState.enumerated() {
            if gameState[element] == 0 && activeComp {

你需要:

 for (position,element) in gameState.enumerated() {
            if gameState[position] == 0 && activeComp {

答案 1 :(得分:0)

更新:谢谢你@MartinR你是对的。我需要检查元素== 0并更新takeSpace = position + 1

我没有必要使用gameState[element]而是我应该检查element == 0本身是否已经gameState已经循环。同样,当我更新我想要的可用空间时,我应该使用position + 1而不是gameState[position] + 1