我是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本身?
提前谢谢你,
萨姆
答案 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