Добавить UIButtons в массив на ViewDidLoad - PullRequest
0 голосов
/ 10 июня 2018

Я работаю над примером проекта.

Я пытаюсь подсчитать количество UIB-кнопок, которые есть у представления ViewControllers, и затем добавить их в массив, чтобы я мог программно получить к ним доступ, т.е. изменитьцвет / заголовок и т. д.

import UIKit

class ViewController: UIViewController
{
    var cardButtons: [UIButton]!

    let cardForegroundColour = UIColor.white
    let cardBackgroundColour = UIColor.orange

    lazy var game = ConcentrationGame(numberOfPairsOfCards: (self.cardButtons.count + 1) / 2)

    override func viewDidLoad()
    {
        for case let button as UIButton in self.view.subviews
        {
            button.backgroundColor = cardForegroundColour
            self.cardButtons.append(button)
        }

        print ("number of buttons /(self.cardButtons.count)")
    }

Итак, он прекрасно работает, но вылетает в строке добавления с:

Тема 1: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании Необязательногозначение

Теперь, если я установлю точку останова, объект button является допустимым объектом.

Я могу корректно изменить все цвета, но просто не могу их добавитьк массиву cardButtons.

Я знаю, что могу настроить cardButtons как выход для сбора и подключить их вручную, но я хочу иметь возможность изменить пользовательский интерфейс, и код просто адаптируется, поэтомудобавление дополнительных кнопок или удаление некоторых не приводит к изменению кода и не требует ручной замены.

Я понимаю, что проблема заключается в моем понимании дополнительных функций, но я думал, что ! в начале и конкретныйобъект button быллегкий подход.

1 Ответ

0 голосов
/ 10 июня 2018

Проблема в том, что cardButtons равно nil.

Измените эту строку var cardButtons: [UIButton]! на var cardButtons = [UIButton]()

...