您也许可以创建一个单例类来管理 Firebase 方法。每当使用 Firebase 构建应用程序时,我都会做类似的事情。这使您可以跨多个类全局引用值并使用与 Firebase 相关的方法。在我采用这种方法之前,我发现自己重写了将对象上传到 firebase 的相同代码。单例可以让您创建可重用的代码,包括在这个全局类中存储“最后一个键”集。
class FirebaseManager {
//You've probably seen something similar to this "shared" in other Apple frameworks
//Maybe URLSession.shared or FileManager.default or UserDefaults.standard or SKPaymentQueue.default() or UIApplication.shared
static var shared = FirebaseManager()
func createEvent(name: String, timeStamp: [String:String], uid: String) {
let postNameObject = [
"EventName": name,
"timestamp": timeStamp,
"userID": uid
] as [String:Any]
postName.setValue(postNameObject, withCompletionBlock: { error, ref in
if error == nil {
self.dismiss(animated: true, completion: nil)
} else {
//Do something
}
})
let childautoID = postName.key
//Whatever else you need to do in the function below here...
}
}
用法:
class SomeViewController: UIViewController {
@IBOutlet var nameTextField: UITextField!
//Some code...
@IBAction func createEventButtonPressed(_ sender: Any) {
FirebaseManager.shared.createEvent(name: nameTextField.text, timeStamp: [".sv":"timestamp"], uid: Auth.auth().currentUser!.uid)
}
//Some more code...
}
同样,您可以在我们的FirebaseManager 类中添加一个类型为String 的名为lastKey 的值。注意我们添加到 FirebaseManager 类顶部的变量:
class FirebaseManager {
var lastKey: String!
static var shared = FirebaseManager()
func createEvent(name: String, timeStamp: [String:String], uid: String) {
let postNameObject = [
"EventName": name,
"timestamp": timeStamp,
"userID": uid
] as [String:Any]
postName.setValue(postNameObject, withCompletionBlock: { error, ref in
if error == nil {
self.dismiss(animated: true, completion: nil)
} else {
//Do something
}
})
let childautoID = postName.key
//Whatever else you need to do in the function below here...
}
}
同样,我们可以在一个视图控制器中设置这个值:
class ViewControllerA: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
FirebaseManager.shared.lastKey = "aBcDeFg9876543210"
}
}
并在另一个视图控制器中获取这个值,该视图控制器在前一个视图控制器之后加载:
class ViewControllerB: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print(FirebaseManager.shared.lastKey)
}
}
打印:aBcDeFg9876543210
这就是static 关键字的美妙之处。您可以在此处了解有关创建单例类的更多信息:https://cocoacasts.com/what-is-a-singleton-and-how-to-create-one-in-swift