【问题标题】:How can I get a variable declared in a class in another class?如何获取在另一个类的类中声明的变量?
【发布时间】:2019-11-04 21:02:46
【问题描述】:

我刚开始使用 Swift/firebase,对不起我的菜鸟。我正在使用 childbyautoid 将数据写入 firebase 数据库。我想访问另一个类中的最后一个键/ID。

    let postName = Database.database().reference().child("Event").childByAutoId()

    let postNameObject = [
        "EventName": NameTextField.text,
        "timestamp": [".sv":"timestamp"],
        "userID": Auth.auth().currentUser!.uid
    ] as [String:Any]

    postName.setValue(postNameObject, withCompletionBlock: { error, ref in
        if error == nil {
            self.dismiss(animated: true, completion: nil)
        } else {
        }
    })
    let childautoID = postName.key

我希望能够在另一个类中调用 childautoID 我们找到另一种更新此节点的方法。

【问题讨论】:

    标签: swift firebase-realtime-database


    【解决方案1】:

    您也许可以创建一个单例类来管理 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多