Я пытаюсь проверить, существует ли ключ/значение (TestKey/TestValue) в узле, и если он делает A и если он не делает B.
Я нашел аналогичную тему в StackOverflow, но ни одно из решений, похоже, не сработало для меня: to-nil-in-swift">Проверка того, равен ли моментальный снимок Firebase нулю в 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)
}
Проблема в том, что выполняется только «А», даже если тест печати показывает, что результат нулевой.
Я пытался отменить операции с == nil, а также пробовал «is NSNull».
Кажется, я не могу заставить поток управления работать должным образом. Возможно, что-то из следующего является виновником, но я не уверен:
- взаимодействие постоянства сObservsSingleEventOfType
- не удаляя наблюдателя (мне даже нужно дляObservSingleEventType?)
- что-то с опционами
- что-то делать с асинхронными вызовами
- что-то связанное с тем, что firebase хранит NSAnyObjects
В конечном итоге цель состоит в том, чтобы проверить, существует ли пара ключ/значение, и если она существует, то ничего не делать, а если она не существует, то создать ее. Что я делаю неправильно и как заставить этот поток управления работать?