json - 显示从 Firebase 的 JSON 解析的数据。无法摆脱可选的字符串打印

标签 json swift firebase swifty-json

我能够使用此函数正确地从 firebase 中提取 JSON 数据。

func makeLeaderboard() {
    let scoresRef = Firebase(url: "https://URL.firebaseio.com/High%20Scores")

    scoresRef.observeEventType(.Value, withBlock: { snapshot in
        var newItems = [LeaderboardItem]()

        for item in snapshot.children {
            let leaderboardItem = LeaderboardItem(snapshot: item as! FDataSnapshot)
            newItems.append(leaderboardItem)
            print(item)
        }
        self.leaderboardItems = newItems
    })
}

json 数据有很多对象,看起来像这样:

Snap (-KCIjxAHgGrNnBbL7jsI) {
    ".priority" = "-11";
    Date = "1457398993.668789";
    Name = brendan;
    Score = 11;
    UUID = "BD561F1C-72A8-4A01-A71A-850682E49D61";
}
Snap (-KC3MktapH6Mebw2sAUe) {
    ".priority" = "-10";
    Date = "1457140993.692581";
    Name = brendan;
    Score = 10;
    UUID = "BD561F1C-72A8-4A01-A71A-850682E49D61";
}  etc etc etc

我正在根据这些快照创建 leaderboardItem 对象。这是基本结构:

import Foundation
import Firebase

struct LeaderboardItem {

let key: String!
var score: String!
let name: String!
let ref: Firebase?


// Initialize from arbitrary data
init(name: String, score: String, completed: Bool, key: String = "") {
    self.key = key
    self.name = name
    self.score = score

    self.ref = nil
}

init(snapshot: FDataSnapshot!) {
    key = snapshot.key!
    name = snapshot.value["Name"]! as! String!
    score = String(snapshot.value["Score"]) //String(snapshot.value["Score"]!)
    ref = snapshot.ref!
}

func toAnyObject() -> AnyObject {
    return [
        "name": name,
        "score": score,
    ]
  }
}

当我尝试显示 leaderboardItem 数组对象的得分属性时,它显示为可选。无论我如何尝试强制解包该属性,它仍然显示为可选。

我用这段代码显示标签:

func populateLeaderBoard() {

    leaderboardScore1.text = "\(leaderboardItems[0].score!) \(leaderboardItems[0].name)"
    leaderboardScore2.text = "\(leaderboardItems[1].score) \(leaderboardItems[1].name)"
    leaderboardScore3.text = "\(leaderboardItems[2].score) \(leaderboardItems[2].name)"
    leaderboardScore4.text = "\(leaderboardItems[3].score) \(leaderboardItems[3].name)"
    leaderboardScore5.text = "\(leaderboardItems[4].score) \(leaderboardItems[4].name)"

}

当我运行代码时,这是显示的输出 enter image description here

最佳答案

您需要解包可选值。你也可以这样做:

if let score = leaderboardItems[0].score {
     leaderboardScore1.text = String(format: "%zd", score)
}

关于json - 显示从 Firebase 的 JSON 解析的数据。无法摆脱可选的字符串打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35861378/

相关文章:

ios - 3 tableView Sections with custom Cell Segues swift

ios - 将JSON映射为数组或对象

java - 将数据库详细信息转换为 JSON 对象

ios - 如何快速检查 JSON 是否为空?

ios - 如何在 Firebase 中检索自动生成的 ID/ key ?

arrays - 有没有办法批量读取firebase文档

PHP - 如何访问 JSON 值并将其存储在 $firstName、$lastName 等变量中

ios - 从 UITabBarController 和 UINavigationController 访问 UIViewController

swift - Firebase 中的唯一用户名

node.js - strip 连接创建客户的正确电话号码格式