我正在尝试从Firebase DataSnapshot解码数据,以便可以使用JSONDecoder解码数据。
当我使用URL通过网络请求(获取Data对象)访问数据时,可以很好地解码该数据。
但是,我想使用Firebase API通过this page上描述的observeSingleEvent直接获取数据。
但是,当我这样做时,似乎无法将结果转换为Data对象,而我需要使用JSONDecoder。
是否可以使用DataSnapshot进行JSON解码的新样式?这怎么可能?我似乎无法弄清楚。
最佳答案
我创建了一个名为CodableFirebase的库,该库提供了专为Firebase设计的Encoders
和Decoders
。
因此,对于上面的示例:
import Firebase
import CodableFirebase
let item: GroceryItem = // here you will create an instance of GroceryItem
let data = try! FirebaseEncoder().encode(item)
Database.database().reference().child("pathToGraceryItem").setValue(data)
以下是读取相同数据的方式:
Database.database().reference().child("pathToGraceryItem").observeSingleEvent(of: .value, with: { (snapshot) in
guard let value = snapshot.value else { return }
do {
let item = try FirebaseDecoder().decode(GroceryItem.self, from: value)
print(item)
} catch let error {
print(error)
}
})