按下按钮时调用nil函数

时间:2019-12-05 16:41:54

标签: swift firebase

我尝试为项目添加评分系统:

var userRating: userRating! {
    didSet {
        good.setTitle("? \(userRating.numberOfGood)", for: [])
    }
}

@IBAction func goodReview(_ sender: UIButton) {
    userRating.good() -> ERROR
    good.setTitle("? \(userRating.numberOfGood)", for: [])
}

userRating类别:

var numberOfGood = 0

func good() {
    numberOfGood += 1
}

但是,每当我单击按钮时,我都会得到线程1:致命错误:意外发现nil,同时隐式解开了一个可选值作为错误...

3 个答案:

答案 0 :(得分:0)

也许问题是您没有在某个地方初始化userRating var?

请记住,您的班级名称应使用大写字母,例如:var userRating: UserRating

答案 1 :(得分:0)

之所以会这样,是因为您根本没有初始化userRating对象。只需将此行添加到您的viewDidLoad()方法。 userRating = UserRating()。希望对您有帮助

答案 2 :(得分:0)

问题是未将userRating var实例化为UserRating类,因此它的“良好”功能为nil。以下是一些代码:

class ViewController: NSViewController {

    class UserRatingClass {
        var numberOfGood = 0

        func good() {
            numberOfGood += 1
        }
    }

    var userRating: UserRatingClass! {
        didSet {
            let x = userRating.numberOfGood
            self.goodLabel.setTitle("rating: \(x)"
        }
    }

并在viewDidLoad中,设置userRating

override func viewDidLoad() {
    super.viewDidLoad()
    self.userRating = UserRatingClass() //this set up the var

然后在按钮操作中

@IBAction func goodReview(_ sender: UIButton) {
    userRating.good()
    let x = userRating.numberOfGood
    self.goodLabel.setTitle("rating: \(x)"
}

另外,如在其他答案中所述,请大写类名,通常的做法是使用“ self”来引用类var。