Firebase с Swift неоднозначно использует наблюдаемость-тип

Я вырывал свои волосы из-за этого. Переходя ко всем страницам со связанными инцидентами и несколькими учебниками, я не нахожу здесь ничего плохого в своем коде, но каким-то образом он не потерпит неудачу, только если я распечатываю значения (что работает) или назначаю их как! NSArray, который затем дает мне пустой массив.

печать снимков

( friend1, 
  friend2, 
  friend3 
)

Я попробовал snapshot.value.values ​​... без игры в кости. Я пытался поиграть с распаковкой... без игры в кости. и это моя последняя попытка:

    friendsList = [String]()

    ref.observeSingleEventOfType(.Value) { (snapshot) -> Void in
        if snapshot.value is NSNull {

        } else {
            for child in snapshot {
                self.friendsList.append(child.value)
            }
        }
    }

что дает мне неоднозначную вещь снова.

2 ответа

Решение

Просто некоторые ошибки кодирования

Удалить: (снимок)-> Void

Изменение: дочерний элемент в снимке как снимок не является последовательностью, тогда как snapshot.children

Я предполагаю, что вы хотите сохранить имя друзей в виде строки, а имя - это ключ в вашей структуре. Поэтому измените self.friendsList.append (child.value) на

let name = child.value["name"] as? String
friendsList.append(name!)

Вот исправленный код:

var friendsList = [String]()

ref.observeSingleEventOfType(.Value, withBlock: { snapshot in

    if snapshot.value is NSNull {

    } else {
        for child in snapshot.children {
            let name = child.value["name"] as? String
            friendsList.append(name!)
        }
        print("\(friendsList)")
    }
})
ref.observeSingleEvent(of: .value, with: { (snapshot) -> Void in

    })

Работа для меня, Xcode 8.3.2

Другие вопросы по тегам