String a = new String("foo");
String b = new String("foo");
System.out.println(a == b); // prints false
System.out.println(a.equals(b)); // prints true
Убедитесь, что вы понимаете, почему. Это потому, что сравнение ==
сравнивает только ссылки; equals()
метод сопоставляет содержимое по символу.
Когда вы вызываете new для a
и b
, каждый получает новую ссылку, указывающую на "foo"
в таблице строк. Ссылки разные, но контент один и тот же.
Обновление: когда вы вызываете .observeSingleEvent, вы вызываете метод асинхронно. Это означает, что метод начнет работать, но ответ придет позже и не будет блокировать основной поток. Вы вызываете этот метод, но данных пока нет, и поэтому вы возвращаете пустой словарь.
Если вы используете блок завершения, то вы получите данные, как только действие метода будет завершено.
func downloadDailyQuote(completion: @escaping ([String:String]) -> Void) {
let reference = Database.database().reference().child("daily")
reference.observeSingleEvent(of: .value) { (snap) in
if let dictionaryWithData = snap.value as? [String:String] {
completion(dictionaryWithData)
} else {
completion(["" : ""])
}
}
}