Попытка получить данные из базы данных Firebase в реальном времени - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь получить данные из базы данных realtine, которая у меня есть в Firebase. Я видел несколько ответов здесь, но не мог найти решение, которое я понял и работал для меня. это мой код:

func ReadTeamPlayers(teamName name: String, completion: @escaping ([Player]?) -> Void) {
    var playersArray = [Player]()
    ref.child(name).observeSingleEvent(of: .value) { (snapshot) in
        if let postDict = snapshot.value as? Dictionary<String, Any>{
            for dict in postDict {
                playersArray.append(Player(name: dict[snapshot.key] as! String, rank: dict[snapshot.value]))
            }
        }
    }
}

В инициализаторе игрока мне нужно узнать имя и ранг игрока. Моя Firebase выглядит так:

TEAM1
   ---player1: 10
   ---player2: 5
   ---player3: 6

playerX - это имя игрока на данный момент, а число - ранг игрока. Как я могу получить информацию для каждого игрока и использовать ее позже? Я пробовал немного, но у меня ничего не получалось.

Редактировать: я изменил код выше, чтобы мой текущий, и это ошибка, которую я получаю сейчас:

Value of tuple type '(key: String, value: Any)' has no member 'subscript'

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Вам нужно

dic.forEach {
    let player = Player(playerName:$0.key, playerRank:$0.value) 
    arr.append(player)
}

OR

let arr = dic.map { Player(playerName:$0.key, playerRank:$0.value)  }

Изменить ответ

func ReadTeamPlayers(teamName name: String, completion: @escaping ([Player]?) -> Void) {

func ReadTeamPlayers(teamName name: String, completion: @escaping ([Player]?) -> Void) {
    ref.child(name).observeSingleEvent(of: .value) { (snapshot) in
        if let mPlayer = snapshot.value as? [String:Int] {
              var arr = [Player]()
              mPlayer.forEach {
               let player = Player(playerName:$0.key, playerRank:$0.value) 
               arr.append(player)
             }
             completion(arr)

        }else{
             completion(nil)
        }
    }
}
0 голосов
/ 09 апреля 2019

Попробуйте, вы используете странный код с обобщениями.Сохраняйте это простым

func ReadTeamPlayers(teamName name: String, completion: @escaping ([Player]?) -> Void) {
    var playersArray = [Player]()

    ref.child(name).observeSingleEvent(of: .value) { (snapshot) in

        guard let dictionary = snapshot.value as? [String: Any] else {
            print("empty snapshot")
            return
        }

        for dict in dictionary {
            print("playerName = \(dict.key)")

            if let playerRank = dict.value as? Int {
                print("playerRank = \(playerRank)")

                let player = Player(name: dict.key, rank: playerRank)
                playersArray.append(player)
            }

        }

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...