'在展开“可选”值时出乎意料地发现了“无”值。

时间:2016-12-16 10:47:20

标签: swift xcode optional unwrap

我想做一个只有在触摸按钮时才会出现的标签。 当在MainViewController中调用函数 hidden()它运行良好但是当我从ButtonAction类调用它(相同的函数)时,我得到一个经典错误:

  

在打开可选值时意外发现nil

以下是代码:

//  MainViewController.swift

import UIKit

class MainViewController: UIViewController {

    @IBOutlet weak var labelToShow: UILabel!
    @IBOutlet weak var button: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()

        labelToShow.isHidden = true
    }

    func hidden() {
        labelToShow.isHidden = true
    }

    func inHidden() {
        labelToShow.isHidden = false
    }

}

AND:

//  ButtonAction.swift


import UIKit

class ButtonAction: UIButton {

    var touched:Bool = false
    var mainScreen = MainViewController()

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        sleep(1)
        mainScreen.hidden()
        touched = true
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        mainScreen.inHidden()
        touched = false
    }
}

2 个答案:

答案 0 :(得分:1)

使用默认初始值设定项mainScreen创建的MainViewController()实例与Interface Builder中设计的实例不同。

您需要对主视图控制器的实际引用(通过IBOutlet或协议/委托等)。

答案 1 :(得分:0)

在该行代码中,您正在创建MainViewController的新实例:

var mainScreen = MainViewController()

您必须获取MainViewController()实例的引用(由storyboard自动创建)

相关问题