比较同一图像的按钮

时间:2018-06-03 14:12:50

标签: ios swift uibutton

我是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?'的值没有打开;你的意思是用'!'还是'?'?

现在问题是内置帮助没有修复错误。另外我不明白为什么我会收到这个错误。有人可以帮我解释为什么我会遇到这个错误吗?还有如何解决它?

2 个答案:

答案 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)

以下错误表示您在不打开包装的情况下使用可选项。如果您确定存在按钮,则强行打开它或安全展开使用guardif != nil。请参阅Apple的可选文档,因为它对iOS开发非常重要。

  

可选类型'UIButton?'的值没有打开;你的意思是用吗?   '!'还是'?'?

您可以使用其标记值比较两个按钮:

if (b1.tag == b2.tag)
{
     code
}

https://developer.apple.com/documentation/swift/optional/