将Firebase数据附加到Swift中的[String]()中

时间:2016-04-12 04:36:02

标签: swift firebase

我有以下数据

enter image description here

我想获取所有objectIds的值并将其附加到Swift中的[String]()。虽然当我使用append函数时,它首先添加一个,然后是两个,然后是三个,依此类推。下面是我现在正在使用的代码。

var ObjectID: [String]?

override func viewDidLoad() {
    super.viewDidLoad()

    self.ObjectID = [];
    let ref = Firebase(url:"https://blazing-heat-3676.firebaseio.com/results")
    ref.queryOrderedByChild("objectId").queryLimitedToLast(201).observeEventType(.ChildAdded) { (snap: FDataSnapshot!) -> Void in

        let objectId = snap.value["objectId"] as! String
        self.ObjectID?.append(objectId)

        print(self.ObjectID)
    }

}

我应该对所有objectId进行哪些修改。

2 个答案:

答案 0 :(得分:3)

Firebase没有数组,但如果数据看起来像数组,Firebase客户端会将其呈现为数组。因此,您只需将结果转换为数组并使用此数组的每个单独对象。

let firebase = Firebase(url: "https://blazing-heat-3676.firebaseio.com/results")
firebase.observeSingleEventOfType(.Value) { (snapshot: FDataSnapshot!) -> Void in
    guard let jsonArray: [JSON] = snapshot.value as? [JSON] else {
        return
    }
    var objectIds: [String] = []
    for json in jsonArray {
        if let id = json["objectId"] as? String {
            objectIds.append(id)
        }
    }
    // Print result
    print(objectIds)
}

JSON

的位置
public typealias JSON = [String : AnyObject]

答案 1 :(得分:2)

作为替代解决方案 - 您可以将其建模为查询,但您明白了。

    var myString: String = ""

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

        for child in snapshot.children {
            let name = child.value.objectForKey("ObjectId") as! String
            myString += name
        }

        print(myString)
    })

此外,您可能希望重新考虑您的密钥(节点名称)作为数字顺序索引很难使用。你应该检查childByAutoId。

此外,Firebase确实通过NSArray支持数组,但通常有更好的选择。