Сравнить кнопки для того же изображения - PullRequest
0 голосов
/ 03 июня 2018

Я новичок в разработке для iOS, и я пытался сделать базовое приложение для игры в крестики-нолики.Я не могу найти способ сравнить значение трех кнопок (кнопок в строке или столбце, и т. Д. ).Мне удалось создать 9 кнопок, и я заменяю изображение каждой кнопки по щелчку пользователя (либо X, либо O в зависимости от очереди).Также я использую тег идентификатора от 1 до 9 на кнопках.

Здесь код, с которым я сталкиваюсь, ошибка.

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 голосов
/ 03 июня 2018
let b1 = self.view.viewWithTag(1) as? UIButton

В приведенном выше утверждении b1 имеет тип UIButton?поэтому для использования свойства currentImage кнопки вам понадобится конкретный экземпляр кнопки.Чтобы решить эту проблему, вы можете использовать if let, guard let или принудительную распаковку.Я привожу пример охраны ниже.

guard let b1 = self.view.viewWithTag(1) as? UIButton else {return}
0 голосов
/ 03 июня 2018

Приведенная ниже ошибка означает, что вы используете опцию, не распаковывая ее.Если вы уверены, что кнопки существуют, принудительно разверните их или для безопасной развертки используйте guard или if != nil.Дополнительную информацию смотрите в документации Apple, так как это важно для разработки под iOS.

Значение необязательного типа 'UIButton?'не развернутый;ты хотел использовать '!'или '?'?

И вы можете сравнить две кнопки, используя значения их тегов:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...