使用 Swift 和 Parse 在 Bool 上使用“==”检查用户验证会抛出错误

Checking user verification using '==' on a Bool throws error using Swift and Parse

我正在尝试检查是否有用户,他们是否已经验证了他们的帐户(通过 phone 号码),如果有,他们让他们继续,但如果有用户没有验证了他们的 phone 号码 继续他们验证他们的 phone 号码。我的问题是我在 Parse User class 中将 "phoneNumberVerified" 设置为 Bool 但随后我尝试使用 if 语句进行检查我得到错误:二元运算符'=='不能应用于操作数输入 'AnyObject!' 和 'Bool'

检查用户和验证状态的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    var currentUser = PFUser.currentUser()

    if currentUser == nil || currentUser!["phoneNumberVerified"] == nil {

        performSegueWithIdentifier("showInitialView", sender: self)

    } else {

        if let numberIsVerified = currentUser!["phoneNumberVerified"] as? Bool {

            if currentUser != nil && numberIsVerified == false {
                performSegueWithIdentifier("showVerifyUserView", sender: self)

            } else if currentUser != nil && numberIsVerified == true {
                performSegueWithIdentifier("showMyPostsView", sender: self)

            } else {
                performSegueWithIdentifier("showInitialView", sender: self)
            }
        }
    }
}

}

我认为您应该尝试将其向下转换为 Bool

override func viewDidLoad() {
    super.viewDidLoad()

    if let currentUser = PFUser.currentUser() {

        if let numberIsVerified = currentUser["phoneNumberVerified"] as? Bool {

            if numberIsVerified == false {
                performSegueWithIdentifier("showVerifyUserView", sender: self)

            } else if numberIsVerified == true {
                performSegueWithIdentifier("showMyPostsView", sender: self)

            } else {
                performSegueWithIdentifier("showInitialView", sender: self)
            }
        }
    }
}

@Paulw11 给了你一个很好的提示。

您需要比较 Swift 中的等值类型,因此如果您将布尔值存储为当前解析用户的一部分,则需要将其转换为这样。

您甚至可以在括号中就地完成:

(currentUser!["phoneNumberVerified"] as! Bool)

我不记得 Parse 是如何存储 bool 的,以及这些类型是否直接兼容,但这应该能让你走上正轨。关键是类型需要相同(或在某些情况下从相同的地方继承)才能公平。