将数组发布到Swift中的firebase数据库 [英] Post Array to firebase Database in Swift

查看:98
本文介绍了将数组发布到Swift中的firebase数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我需要将数据发布到firebase数据库中,这对于数组来说只能接受类型 NSArray 。然而,该应用程序需要添加到数组

将被发布的Json数据

 对象:someObjectKey [
ArrayOfItems [
Item:someItemNumber
Item:someItemNumber
Item:someItemNumber
]
TimeStamp:102047355
SomeOtherTimeStamp:null
SomeInt:1111
someOtherInt:2222
SomeBoolean:false
]
}


$ b $如何将上面的数据推送到数据库?

尝试的途径

- 转换a SwiftArray 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 type NSArray. The application however, needs to add to the array

Json 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 a SwiftArray to a NSArray
-Convert an NSMutableArray to a NSArray

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆