我有以下数据
我想获取所有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进行哪些修改。
答案 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支持数组,但通常有更好的选择。