Cha*_*993 5 ios firebase swift firebase-authentication firebase-realtime-database
我正在寻找一种从Swift的Firebase中检索(有时保存)数据的干净方法。令我烦恼的是,我所有的数据库调用都写在视图控制器代码的中间。因此,我正在寻找某种定制数据服务类。我发现本教程非常接近我想要的:http : //www.mobilecyberpunks.com/ ?p= 82。
他们答应了第二部分,但我找不到第二部分,所以我想这从来没有做过。在第二部分中,他们承诺将使用此自定义数据服务介绍如何检索和保存数据(这对我来说是最重要的部分)。
我正在考虑一个API类(如本教程中所述),当我检索数据并完成从firebase的检索时,我将其保存在此api类的数据集中。然后,我将在通知中心发布通知。但是我不确定这是最佳做法还是执行此操作的好方法。
有没有人知道如何执行此操作(完成我发现的本教程或以其他方式完成)?
提前致谢!
我开始使用这个解决方案并对其进行了一些改进,然后我得到了一个非常方便的解决方案。
我创建了一个名为 FirebaseAPI 的自定义类。这是一个单例类。此类包含 Firebase 的所有方法(身份验证、数据库、存储……)。
例子:
FirebaseAPI.swift
import FirebaseAuth
import FirebaseDatabase
class FirebaseAPI {
static let shared = FirebaseAPI()
private init() {}
//Authentication
func logInUser(onCompletion: @escaping (String?) -> Void {
FIRAuth.auth().signInAnonymously(completion: {(user, error) in
if error == nil {
onCompletion(user!.uid)
} else {
onCompletion(nil)
}
})
}
//Database
func getObjects(parameter: ParamaterClass, onCompletion: @escaping ([ObjectClass]) -> Void) {
Constants.Firebase.References.Object?.observe(.value, with: { snapshot in
var objects = [ObjectClass]()
if snapshot.exists() {
for child in snapshot.children.allObjects {
let object = Object(snapshot: child as! FIRDataSnapshot)
objects.append(object)
}
}
onCompletion(objects)
})
}
}
Run Code Online (Sandbox Code Playgroud)
常量.swift
import FirebaseDatabase
struct Constants {
struct Firebase {
static var CurrentUser: FIRDatabaseReference?
static var Objects: FIRDatabaseReference?
}
}
Run Code Online (Sandbox Code Playgroud)
AppDelegate.swift
import UIKit
import Firebase
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FIRApp.configure()
FirebaseAPI.shared.logInUser(onCompletion { uid in
if uid != nil {
Constants.Firebase.References.CurrentUser = FIRDatabase.database().reference().child("users").child(uid!)
Constants.Firebase.References.CurrentUser.keepSynced(true)
Constants.Firebase.References.Objects = FIRDatabase.database().reference().child("objects")
Constants.Firebase.Reference.Objects?.keepSynced(true)
}
})
}
return true
}
Run Code Online (Sandbox Code Playgroud)
我可以为您提供一个在 ViewController 中调用 FirebaseAPI 中的方法的示例,但此处的 AppDelegate.swift 代码中给出了此类方法的示例(FirebaseAPI.shared.logInUser 方法)。
到目前为止,在 3 个不同的项目中使用了这个结构,并且运行流畅!
归档时间: |
|
查看次数: |
3205 次 |
最近记录: |