Swift 正在尝试从Firebase实时数据库获取数据
我正试图从Firebase中的realtine数据库中获取数据。 我在这里看到了一些答案,但找不到一个我理解并为我工作的解决方案。 这是我的代码:Swift 正在尝试从Firebase实时数据库获取数据,swift,firebase,Swift,Firebase,我正试图从Firebase中的realtine数据库中获取数据。 我在这里看到了一些答案,但找不到一个我理解并为我工作的解决方案。 这是我的代码: func ReadTeamPlayers(teamName name: String, completion: @escaping ([Player]?) -> Void) { var playersArray = [Player]() ref.child(name).observeSingleEvent(of: .value)
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]))
}
}
}
}
playerX是玩家的名字,数字是玩家的等级。
我怎样才能获得每个玩家的信息并在以后使用?
我尝试了几件事,但没有一件对我有用
编辑:我将上面的代码更改为当前代码,这是我现在遇到的错误:
Value of tuple type '(key: String, value: Any)' has no member 'subscript'
你需要
dic.forEach {
let player = Player(playerName:$0.key, playerRank:$0.value)
arr.append(player)
}
或
变更响应
func ReadTeamPlayers(teamName name: String, completion: @escaping ([Player]?) -> Void) {
试试这个,你使用的是奇怪的泛型代码。保持简单
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)
}
}
}
}
谢谢,我会试试,但dic是什么?我没有这样命名的变量,字典给了我一个错误。我编辑了OP,随着代码和错误的改变,我在OP中更改了上面的代码,你能看一下吗>?谢谢,现在正在编译。
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)
}
}
}
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)
}
}
}
}