【问题标题】:Why isn't this if block being executed为什么这不是 if 块正在执行
【发布时间】:2017-12-19 14:03:01
【问题描述】:

我的代码中有以下函数可以从 firebase 数据库中读取用户个人资料图片。

func setupProfile() {
    profileImageView.layer.cornerRadius = 64
    profileImageView.clipsToBounds = true
    let uid = FIRAuth.auth()?.currentUser?.uid
    let dbref = FIRDatabase.database().reference()

    dbref.child("users").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
        let user = snapshot.value as? [String: AnyObject]
        let username = user?["username"] as! String?
        let url = user?["profileImage"] as? String!
        if url == nil {
            let pic = UIImage(named: "placeholderImage")
            self.profileImageView.image = pic
            dbref.removeAllObservers()
            return
        }

        self.usernameLabel.text = "@" + username!
        //self.profileImageView.downloadImage(from: url!)
    })
    dbref.removeAllObservers()
}

但是当 profileImage 字段为空时,它仍然没有执行里面的代码

if url == nil

块执行,我知道observeSingleEvent 创建了一个侦听器来查找数据的变化,但我认为它会执行'with' 闭包中的所有代码,这意味着命中if 语句。我在这里缺少什么,为什么这段代码不执行所有其余的代码。

【问题讨论】:

  • 您在添加观察者后立即调用dbref.removeAllObservers()
  • @ReinierMelian 即使我删除该行,我仍然会得到相同的行为。
  • 当你说空是什么意思时,""空字符串?

标签: ios firebase swift3 firebase-realtime-database firebase-authentication


【解决方案1】:

尝试删除!从行尾开始:

let url = user?["profileImage"] as? String

【讨论】:

  • 看到这就是我的想法,但我只是尝试再次放入 print 语句,但我运气不好,该块没有执行。我也检查了调试器,url 肯定包含 nil。
  • 删除!从行尾:let url = user?["profileImage"] as? String
猜你喜欢
  • 2020-11-07
  • 2015-08-31
  • 2019-07-07
  • 2017-07-08
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
相关资源
最近更新 更多