【问题标题】:nil function called when button pressed按下按钮时调用 nil 函数
【发布时间】:2020-03-30 15:39:15
【问题描述】:

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

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
}

但每次我点击按钮时,我都会得到 Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value as an Error...

【问题讨论】:

    标签: swift firebase


    【解决方案1】:

    问题是 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”来引用类变量是一种好习惯。

    【讨论】:

    • 有没有办法通过 Firebase 保存它?我试过 ** ref.child("numberOfOkay").setValue(numberOfOkay)** 但我也得到了零……
    • @SwiftStarter1848 我的答案(或问题)中的代码与 Firebase 并没有真正的关系,因此我们需要了解您尝试存储 Firebase 数据的位置和方式。我建议使用不起作用的代码打开一个新的单独问题,我们可以看看。请务必包含有问题的代码、您所期望的描述以及有关您的 Firebase 结构应该是什么样子的一些信息
    • 好的,我已经完成了 - 如果你能检查一下,那就太好了stackoverflow.com/questions/59236420/…
    【解决方案2】:

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

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

    【讨论】:

    • 我在我的问题中给出的第一行代码中调用它:(
    【解决方案3】:

    发生这种情况是因为您根本没有初始化您的 userRating 对象。只需将此行添加到您的 viewDidLoad() 方法。 userRating = UserRating()。希望对你有帮助

    【讨论】:

    • 但是我已经在第一行代码中初始化了它
    • 在你提供的代码中,你没有初始化一个变量,你只是声明它
    猜你喜欢
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2013-11-06
    • 2019-08-26
    相关资源
    最近更新 更多