【发布时间】: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