CodableFirebase
概览
这个库可以帮助您使用遵守 Codable
协议的自定义类型与 Firebase 进行交互。以下是一个自定义模型的示例:
struct Model: Codable {
enum MyEnum: Int, Codable {
case one, two, three
}
let stringExample: String
let booleanExample: Bool
let numberExample: Double
let dateExample: Date
let arrayExample: [String]
let optionalExample: Int?
let objectExample: [String: String]
let myEnumExample: MyEnum
}
Firebase 实时数据库使用
这就是您如何使用库与 Firebase 实时数据库 的方法
import Firebase
import CodableFirebase
let model: Model // here you will create an instance of Model
let data = try! FirebaseEncoder().encode(model)
Database.database().reference().child("model").setValue(data)
以下是从 Firebase 实时数据库 读取相同值的方法
Database.database().reference().child("model").observeSingleEvent(of: .value, with: { snapshot in
guard let value = snapshot.value else { return }
do {
let model = try FirebaseDecoder().decode(Model.self, from: value)
print(model)
} catch let error {
print(error)
}
})
Firebase Cloud Firestore 使用
这是如何使用 Firebase Cloud Firestore 编码模型的方法
import Firebase
import CodableFirebase
let model: Model // here you will create an instance of Model
let docData = try! FirestoreEncoder().encode(model)
Firestore.firestore().collection("data").document("one").setData(docData) { error in
if let error = error {
print("Error writing document: \(error)")
} else {
print("Document successfully written!")
}
}
以下是使用 Firebase Cloud Firestore 解码相同模型的方法
Firestore.firestore().collection("data").document("one").getDocument { document, error in
if let document = document {
let model = try! FirestoreDecoder().decode(Model.self, from: document.data())
print("Model: \(model)")
} else {
print("Document does not exist")
}
}
GeoPoint
、DocumentReference
、FieldValue
、Timestamp
如何在云Firestore中使用 为了使用这些类型与 Cloud Firestore 相结合,您需要在您的应用中某个地方添加以下代码
extension DocumentReference: DocumentReferenceType {}
extension GeoPoint: GeoPointType {}
extension FieldValue: FieldValueType {}
extension Timestamp: TimestampType {}
现在它们可以成为 Codable
,并且可以与 FirestoreEncoder
和 FirestoreDecoder
正确使用。
请注意由于 FieldValue
只用于 setData()
和 updateData()
,它只采用 Encodable
协议。
集成
CocoaPods (iOS 9+)
您可以通过将 CodableFirebase 添加到您的 Podfile 中来使用 CocoaPods 进行安装
platform :ios, '9.0'
use_frameworks!
target 'MyApp' do
pod 'CodableFirebase'
end
请注意,这需要 CocoaPods 版本 36,并且您的 iOS 部署目标至少为 9.0
Carthage (iOS 9+)
您可以通过将 CodableFirebase 添加到您的 Cartfile 中来使用 Carthage 进行安装
github "alickbass/CodableFirebase"