首页 > 解决方案 > 将 UIButtons 添加到 ViewDidLoad 上的数组

问题描述

我正在处理一个示例项目。

我正在尝试计算 ViewControllers 视图具有的 UIButtons 的数量,然后将它们添加到数组中,以便我可以以编程方式访问它们,即更改颜色/标题等。

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:致命错误:在展开可选值时意外发现 nil

现在,如果我设置断点,则该button对象是有效对象。

我可以很好地更改所有颜色,但我无法将它们添加到cardButtons.

我知道我可以设置cardButtons为 Collection Outlet,并手动连接它们,但我希望能够更改 UI 并且代码只是适应,因此添加更多按钮或删除一些按钮不会更改代码或需要手动重新布线。

我意识到问题在于我对选项的理解,但我认为!一开始和具体对象button是正确的方法。

标签: iosswiftuibuttonuikitoptional

解决方案


问题cardButtonsnil

将此行更改var cardButtons: [UIButton]!var cardButtons = [UIButton]()


推荐阅读