【问题标题】:How to update the value of a boolean variable in swift?如何快速更新布尔变量的值?
【发布时间】:2015-02-16 01:51:15
【问题描述】:

过去 3 天我一直在试图解决这个问题。我可以很容易地用 Java 做我想做的事,但是当我尝试用 Swift 做这件事时,Xcode 给我带来了困难。

在这种情况下,我试图从 Parse 中检索一个布尔对象,它将告诉我用户的电子邮件是否已经过验证。出于某种原因,每当我告诉代码检查对象是否为假时,checkEmail 显然为零。另外值得注意的是,如果我在var checkEmail = User["emailVerified"] as Bool 之后println(checkEmail) 我得到正确的布尔值(真或假)。

代码一离开查询函数,checkEmail 的值就丢失了。

关于我做错了什么有什么想法吗?

import UIKit

class RegisterEmail: UIViewController {

var checkEmail: Bool?

override func viewDidLoad() {
    super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


 override func shouldPerformSegueWithIdentifier(identifier: String!, sender: AnyObject!) -> Bool {
    if identifier == "passEmail" {

        var query = PFUser.query()
        query.getObjectInBackgroundWithId("vFu93HatwL") {
            (User: PFObject!, error: NSError!) -> Void in
            if error == nil {
                NSLog("%@", User)
            } else {
                NSLog("%@", error)
            }

            let checkEmail = User["emailVerified"] as Bool


            println(checkEmail) //I get the correct value here

        }   

        println(checkEmail) //The value is lost here

        if (checkEmail == false) {

            let alert = UIAlertView()
            alert.title = "Error"
            alert.message = "The email you have provided has not been verified."
            alert.addButtonWithTitle("Dismiss")
            alert.show()

            return false
        }

        else {

            return true
        }
    }

    // by default, transition
    return true
}

}

【问题讨论】:

  • 您必须将 checkEmail 的声明移出 query.getObjectInBackgroundWithId("vFu93HatwL") { ,
  • 这不是这里唯一的问题。 getObjectInBackgroundWithId() 是异步的,因此第二个日志仍然不正确,因为此时 checkEmail 没有值。
  • 等等...愚蠢的问题我知道,但是我怎样才能更改变量的值...。Xcode 给了我一堆 BS 错误。我知道,这是一个简单的概念(我可以在 Java 中实现)......并且 checkEmail 在我的代码顶部声明。
  • 如果您包括您收到的错误和位置,将会很有帮助。你可能已经声明了一个属性 checkEmail,但是你正在创建一个同名的新局部变量,它优先于本地范围内的属性。
  • 别管 BS 错误,我想通了,我只是把 self.在变量名前面。无论如何,回到主题,即使我删除了变量的本地声明,我仍然会丢失数据。

标签: object swift parse-platform boolean data-retrieval


【解决方案1】:

您没有将新值分配给对象属性,而是将其分配给局部变量。去掉let关键字,它声明了一个新的局部变量,在:

let checkEmail = User["emailVerified"] as Bool

【讨论】:

  • 不起作用。我收到一条错误消息,提示我需要添加“self.”。当我这样做时,它仍然不能解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多