在ViewDidLoad

时间:2018-06-10 12:37:29

标签: ios swift uibutton uikit optional

我正在完成一个示例项目。

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

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是正确的方法。

1 个答案:

答案 0 :(得分:1)

问题是cardButtonsnil

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