我正在尝试查询Firebase,以检查是否有任何用户,waiting: "1"然后在返回快照时,我想查看它是否等于nil。我尝试执行此操作,但是我使用的方法不起作用,并且如果快照不等于nil,则只有某种输出。我添加了当前拥有的代码和Firebase中的JSON文本。
waiting: "1"
import UIKit import Firebase import Spring class GamesViewController: UIViewController { let ref = Firebase(url: "https://123test123.firebaseio.com") var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView() @IBAction func StartGamePressed(sender: AnyObject) { print("test1") var peopleWaiting: [String] = [] let userRef = Firebase(url:"https://123test123.firebaseio.com/users") userRef.queryOrderedByChild("waiting").queryEqualToValue("1") .observeEventType(.ChildAdded, withBlock: { snapshot in print(snapshot.key) if snapshot.key == nil { print("test2") let userData = ["waiting": "1"] let usersRef = self.ref.childByAppendingPath("users") let hopperRef = usersRef.childByAppendingPath("\(self.ref.authData.uid)") hopperRef.updateChildValues(userData, withCompletionBlock: { (error:NSError?, ref:Firebase!) in if (error != nil) { print("Data could not be saved.") self.displayAlert("Oops!", message: "We have been unable to get you into a game, check you have an internet conection. If this problem carries on contect support") } else { print("Data saved successfully!") let storyboard = UIStoryboard(name: "Main", bundle: nil) let Home : UIViewController = storyboard.instantiateViewControllerWithIdentifier("continueToGame") self.presentViewController(Home, animated: true, completion: nil) } }) } else { var randomUID: String peopleWaiting.append(snapshot.key) let randomIndex = Int(arc4random_uniform(UInt32(peopleWaiting.count))) randomUID = peopleWaiting[randomIndex] print(randomUID) let storyboard = UIStoryboard(name: "Main", bundle: nil) let Home : UIViewController = storyboard.instantiateViewControllerWithIdentifier("continueToGame") self.presentViewController(Home, animated: true, completion: nil) } }) } func displayAlert(title: String, message: String){ let formEmpty = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) formEmpty.addAction((UIAlertAction(title: "Ok", style: .Default, handler: { (action) -> Void in }))) self.presentViewController(formEmpty, animated: true, completion: nil) } func activityIndicatorFunction(){ activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 100, 100)) activityIndicator.backgroundColor = UIColor(red:0.16, green:0.17, blue:0.21, alpha:1) activityIndicator.layer.cornerRadius = 6 activityIndicator.center = self.view.center activityIndicator.hidesWhenStopped = true activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.WhiteLarge view.addSubview(activityIndicator) activityIndicator.startAnimating() UIApplication.sharedApplication().beginIgnoringInteractionEvents() } }
JSON数据:
{ "68e42b7f-aea5-4c3f-b655-51a99cb05bb0" : { "email" : "test1@test1.com", "username" : "test1", "waiting" : "0" }, "8503d5a8-fc4a-492b-9883-ec3664898b4f" : { "email" : "test2@test2.com", "username" : "test2", "waiting" : "0" } }
这里发生了几件事,但是最重要的是,您无法测试患儿的存在.ChildAdded。如果您考虑一下,那是有道理的:.ChildAdded当将一个孩子添加到该位置时,将引发该事件。如果未添加任何子代,则不会引发该事件。
.ChildAdded
因此,如果要测试某个位置是否存在孩子,则需要使用.Value。一旦执行此操作,便可以通过多种方法来检测存在。这是一个:
.Value
ref.queryOrderedByChild("waiting").queryEqualToValue("1") .observeEventType(.Value, withBlock: { snapshot in print(snapshot.value) if !snapshot.exists() { print("test2") } });