ฉันกำลังพยายามตรวจสอบเพื่อดูว่ามีคีย์/ค่า (TestKey/TestValue) อยู่ที่โหนดหรือไม่ และโหนดนั้นทำ A หรือไม่ และมันไม่ทำ B หรือไม่
ฉันพบกระทู้ที่คล้ายกันเกี่ยวกับเรื่องนี้ใน StackOverflow แต่ดูเหมือนจะไม่มีวิธีแก้ไขปัญหาใดที่เหมาะกับฉัน: ตรวจสอบว่า Firebase snapshot เท่ากับศูนย์ใน Swift หรือไม่
ฉันมีการตั้งค่าฐานข้อมูลที่มีการใส่คู่คีย์ TestKey/TestValue ไว้แล้ว นี่คือรหัสของฉัน:
var ref: FIRDatabaseReference!
ref = FIRDatabase.database().reference()
ref.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
//A print test to see stored value before control flow
print(snapshot.value!["TestKey"]) //returns TestValue
print(snapshot.value!["NilKey"]) //returns nil
// I change the value from TestKey <-> NilKey here to test the control flow
if snapshot.value!["TestKey"] != nil {
print("Exists currently")
} else {
print("Does not exist currently")
}
}) { (error) in
print(error.localizedDescription)
}
ปัญหาคือมีเพียง "A" เท่านั้นที่ถูกดำเนินการ แม้ว่าการทดสอบการพิมพ์จะแสดงผลลัพธ์เป็นศูนย์ก็ตาม
ฉันได้ลองย้อนกลับการดำเนินการด้วย == nil และได้ลอง "is NSNUll" แล้ว
ดูเหมือนว่าฉันไม่สามารถทำให้โฟลว์การควบคุมทำงานได้อย่างถูกต้อง บางทีหนึ่งในสิ่งต่อไปนี้อาจเป็นตัวการ แต่ฉันไม่แน่ใจ:
- ปฏิสัมพันธ์ของการคงอยู่กับการสังเกต SingleEventOfType
- ไม่ลบผู้สังเกตการณ์ (ฉันจำเป็นต้องทำ observSingleEventType ด้วยหรือไม่)
- บางอย่างที่เกี่ยวข้องกับตัวเลือก
- บางอย่างเกี่ยวกับการโทรแบบอะซิงโครนัส
- บางอย่างเกี่ยวข้องกับความจริงที่ว่า firebase เก็บ NSAnyObjects
เป้าหมายสูงสุดคือการตรวจสอบว่ามีคู่คีย์/ค่าอยู่หรือไม่ และมีอยู่หรือไม่ ไม่ต้องทำอะไรเลย หากไม่มี ให้สร้างมันขึ้นมา ฉันทำอะไรผิดและฉันจะทำให้โฟลว์การควบคุมนี้ทำงานได้อย่างไร