将数组发布到Swift中的firebase数据库 [英] Post Array to firebase Database in Swift
问题描述
我需要将数据发布到firebase数据库中,这对于数组来说只能接受类型
NSArray
。然而,该应用程序需要添加到数组将被发布的Json数据
对象:someObjectKey [
ArrayOfItems [
Item:someItemNumber
Item:someItemNumber
Item:someItemNumber
]
TimeStamp:102047355
SomeOtherTimeStamp:null
SomeInt:1111
someOtherInt:2222
SomeBoolean:false
]
}
$ b $如何将上面的数据推送到数据库?
尝试的途径
- 转换aSwiftArray
到NSArray
- 将NSMutableArray
转换为NSArray
代码
<$ c
$ b返回\(NSDate()。timeIntervalSince1970 * 1000)
}
var someI nt = 1111
var someOtherInt = 2222
let myArrayOfStuff = convertItemsToNSArray()
$ b $ post:[String:Any] = [timestamp:Timestamp,
someInt:someInt,
someOtherInt:someOtherInt,
items:ItemList]
//方法调用引用FIRDatabase.database.reference.child ...
FirebaseDatabaseService.databaseReference.setValue(post)
}
private func convertItemsToNSArray() - > NSArray {
var thisArray:NSMutableArray = []
用于项目中的项目{
thisArray.add([name:Foo,
key :bar,
someCoolInt:1234])
}
返回thisArray
//这不起作用,因为它会以NSMutableArray的形式返回
}
干杯
解决方案我不记得究竟是什么原因,但也遇到了类似的问题,在android和Ios.workaround是保存数组通过将其转换为字典第一。
比方说,我有经度和纬度的数组:
我首先创建一个类来包装lat和long。我有一个函数来获取包装所需数据的字典。
class HiddenLatlng {
private var latitude:Double
private var longitude:Double
init(lat:Double,lng:Double){
self.latitude = lat
self.longitude = lng
}
func toDictionery() - > [String:Double] {
var dict = [String:Double]()
dict [latitude] = self.latitude
dict [longitude] = self.longitude
在将数组保存到firebase之前,首先将该数组转换为使用上面的类的字典。
var dict = [ String:AnyObject]()//主字典保存到firebase
var dictArray = [String:[String:Double]]()// temp字典
for(index,element)in hide.vertices.enumerate(){
dictArray [String(index)] = HiddenLatlng(lat:element.latitude,lng:element.longitude).toDictionery()
}
dict [ eventLatLngList] = dictArray //将临时词典添加到主词典中。
`
现在我们可以保存($ key).updateChildValues(dict){(error()){/ *
pre $ self $ :NSError?,引用:FIRDatabaseReference)在
完成(错误)/ /如果一些错误处理它。
}
我希望它能节省您一些时间和麻烦:)
Question
I need to post data into the firebase database, which (in terms of arrays) can only accept typeNSArray
. The application however, needs to add to the arrayJson Data that wil be posted
Object: someObjectKey[ ArrayOfItems[ Item: someItemNumber Item: someItemNumber Item: someItemNumber ] TimeStamp: 102047355 SomeOtherTimeStamp: null SomeInt: 1111 someOtherInt: 2222 SomeBoolean: false ] }
Goal
How can I get the data above to be pushed up into the database?Attempted Avenues
-Convert aSwiftArray
to aNSArray
-Convert anNSMutableArray
to aNSArray
Code
public func postToFireBase(){ var Timestamp: String { return "\(NSDate().timeIntervalSince1970 * 1000)" } var someInt = 1111 var someOtherInt = 2222 let myArrayOfStuff = convertItemsToNSArray() let post: [String : Any] = ["timestamp": Timestamp, "someInt": someInt, "someOtherInt": someOtherInt, "items": ItemList] //Method Call References the FIRDatabase.database.reference.child... FirebaseDatabaseService.databaseReference.setValue(post) } private func convertItemsToNSArray() -> NSArray{ var thisArray: NSMutableArray = [] for item in items{ thisArray.add(["name": "Foo", "key": "Bar", "someCoolInt": 1234]) } return thisArray //This won't work because it's coming back as NSMutableArray anyway }
Cheers
解决方案I can't remember exactly whats the reason, but did faced similar problem too, in both android and Ios.workaround is that save the array by converting it to a dictionary first.
let's say I have array of longitude and latitude:
I first create a class for to wrap lat and long. I have a function to get the dictionary which wraps the required data.
class HiddenLatlng { private var latitude: Double private var longitude: Double init(lat: Double, lng: Double) { self.latitude = lat self.longitude = lng } func toDictionery() -> [ String : Double ] { var dict = [ String : Double ]() dict["latitude"] = self.latitude dict["longitude"] = self.longitude return dict }
}
just before saving the array to firebase, first convert this array to dictionary using above class.
var dict = [String: AnyObject]() // main dictionary saved to firebase var dictArray = [ String : [String: Double] ]() // temp dictionary for (index, element) in hide.vertices.enumerate(){ dictArray[String(index)] = HiddenLatlng(lat: element.latitude, lng: element.longitude).toDictionery() } dict["eventLatLngList"] = dictArray // add temp dictionary to main dictionary.
`
now we can save it to firebase.
self.reference.child("yourKey").child(key).updateChildValues(dict) { (error: NSError?, reference: FIRDatabaseReference) in completion(error) // if some error handle it. }
I hope it saves you some time and trouble :)
这篇关于将数组发布到Swift中的firebase数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文