Palash Sharma
Palash Sharma

Reputation: 682

Append Firebase Data into [String]() in Swift

I have data like below

enter image description here

I want to get the value of all objectIds and append it to a [String]() in Swift. Though when I use the append function, it first adds one, then two, and then three and so on. Below is the code I'm using right now.

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)
    }

}

What modifications should I make for all objectIds to be in the array.

Upvotes: 0

Views: 918

Answers (2)

Jay
Jay

Reputation: 35657

As an alternative solution - you can model this into query but you get the idea.

    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)
    })

Also, you may want to re-think your keys (node names) as numeric sequential indexes are hard to work with. You should check into childByAutoId.

Also, Firebase does support arrays via NSArray however, there are usually much better alternatives.

Upvotes: 2

Alexey Pichukov
Alexey Pichukov

Reputation: 3405

Firebase have no arrays but if the data looks like an array, Firebase clients will render it as an array. Therefore you can simply convert the result into an array and work with each individual object of this array.

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)
}

Where JSON is

public typealias JSON = [String : AnyObject]

Upvotes: 3

Related Questions