我是iOS开发的新手,我正在尝试制作一个基本的tic tac toe app。 我无法找到比较三个按钮(行或列中的按钮,等。)的值的方法。我设法创建了9个按钮,我在用户点击时替换每个按钮的图像(基于转弯的X或O)。此外,我在按钮上使用1-9的标签ID。
这里的代码我正面临一个错误。
func check(){
let b1 = self.view.viewWithTag(1) as? UIButton
let b2 = self.view.viewWithTag(2) as? UIButton
let b3 = self.view.viewWithTag(3) as? UIButton
let b4 = self.view.viewWithTag(4) as? UIButton
let b5 = self.view.viewWithTag(5) as? UIButton
let b6 = self.view.viewWithTag(6) as? UIButton
let b7 = self.view.viewWithTag(7) as? UIButton
let b8 = self.view.viewWithTag(8) as? UIButton
let b9 = self.view.viewWithTag(9) as? UIButton
if(b1.currentImage.isEqual(UIImage(named: "x")) && b2.currentImage.isEqual(UIImage(named: "x")) && b3.currentImage.isEqual(UIImage(named: "x")))
{
print("X wins")
}
}
我在if
声明中收到错误说:
可选类型'UIButton?'的值没有打开;你的意思是用'!'还是'?'?
现在问题是内置帮助没有修复错误。另外我不明白为什么我会收到这个错误。有人可以帮我解释为什么我会遇到这个错误吗?还有如何解决它?
答案 0 :(得分:1)
let b1 = self.view.viewWithTag(1) as? UIButton
在上面的陈述中,b1的类型是UIButton?所以为了使用button的currentImage属性,你需要一个具体的按钮实例。要解决此问题,您可以使用if let,guard let或force unwrapping。我在下面举一个守卫的例子。
guard let b1 = self.view.viewWithTag(1) as? UIButton else {return}
答案 1 :(得分:0)
以下错误表示您在不打开包装的情况下使用可选项。如果您确定存在按钮,则强行打开它或安全展开使用guard
或if != nil
。请参阅Apple的可选文档,因为它对iOS开发非常重要。
可选类型'UIButton?'的值没有打开;你的意思是用吗? '!'还是'?'?
您可以使用其标记值比较两个按钮:
if (b1.tag == b2.tag)
{
code
}