Swift:如何在方法中更改整数变量名称并重新分配其值

时间:2016-06-06 10:39:32

标签: swift

我是Swift /编程的完全初学者,我正在制作一个noughts并将app作为在线课程的一部分。在我看到解决方案之前,我想自己做这个,所以我的逻辑可能有点奇怪。

每次按下按钮时都会调用一个函数(有9个,每个正方形一个)。该功能用于:
i)更新转数(这使我能够看到它是谁) ii)将图片更改为X或O
iii)每转一圈后停用按钮
iv)通过改变方格势线的值来计算是否有人赢了。我选择这样做的数字是3和4(对于noughts和crosses),因此下面的c = 3或4。这意味着如果任何获胜线加起来为9或12,则游戏会在有人获胜时停止。

我有9个变量(Int),它们保持每个方格的分数 - 它们是a1o,a2o,a3o,b1o ......,即所有以“o”结尾。在函数中,我想在“o”前面添加“a1”字符串,这意味着每个按钮只与自身相关,只有一行代码在函数上方(在按钮括号内)。

此功能目前看起来像这样;通过以下方式调用它:按钮(a1,buttonValue:“a1”)

    func button(buttonName: UIButton, buttonValue: NSString) -> String {

            let a = buttonName
            var b = buttonValue

            b = (b as String) + "o"
            print(b)
            // the above prints "a1o", the name of the variable, but it is a string...

            index += 1
            print("Go number \(index)")

            if index % 2 == 0 {

                // show a nought

                a.setImage(UIImage(named: "nought.png"), forState: UIControlState.Normal)

                c = 3
                // the above line doesn't work as its a string, but I am attempting to set the squares value to 3 (i.e. a1o = 3)

                winner()

                a.userInteractionEnabled = false


            } else {

                // show a cross

                a.setImage(UIImage(named: "cross.png"), forState: UIControlState.Normal)

                c = 4 
                // the above line doesn't work as its a string

                winner()

                a.userInteractionEnabled = false

            }

            return "done"

        }

我无法弄清楚如何通过不将变量* a1 * o变为字符串来改变变量* a1 * o的常见词干,或者如果我这样做,我将如何将其转换回变量。

我正在努力定义,因此寻找答案一直很难。变量a1o是一个整数,但是如何引用a1o本身?

提前谢谢你,

萨姆

1 个答案:

答案 0 :(得分:0)

不可能按名称动态访问变量,就像您想要的那样。但是,有更好的方法来实现相同的目标。二维数组怎么样?

var scores: [[Int]] = [[0,0,0], [0,0,0], [0,0,0]]
scores[0][1] = 4 //this is the new version of "a2o = 4"

与变量名称不同,数组的索引(在这种情况下为“0”和“1”)可以动态选择。或者,如果你真的想让按钮的值完全相同,你可以使用字典:

var scores: [String: Int] = [:]
scores[buttonValue as String] = 4