Swift和Firestore:AppDelegate和ViewControllers

时间:2018-07-05 09:56:13

标签: ios swift firebase google-cloud-firestore

我正在尝试从iOS应用访问Firestore中的数据。 我安装了 Firebase / Firestore 吊舱,然后再次构建了该项目。然后,我在 AppDelegate.swift 中插入了以下代码:

import Firebase

FirebaseApp.configure()

let db = Firestore.firestore()

回到我的 ViewController ,我试图访问db以获取一些数据:

    let services = db.collection("services").getDocuments { (snapshot, error) in
        if let error = error {
            print(error)
        }

        guard let docs = snapshot?.documents else { return }

        for doc in docs {
            print(doc.data())
        }
    }

但是出现以下错误:使用未解析的标识符'db'

如果将以下行移至ViewController,一切都很好:

let db = Firestore.firestore()

知道为什么吗?

2 个答案:

答案 0 :(得分:2)

因为类中的任何已声明属性只能从该类对象访问。除非您将其设为静态。

因此,如果您希望能够访问数据库,则有两个选择:

  • 在AppDelegate类中将其声明为静态属性。
  • 在视图控制器类中声明它,这是绝对好的。

答案 1 :(得分:1)

新建一个名为“ GlobalFunctions.swift”的类

import Firebase

class GlobalFunctions: NSObject {
   static let db = Firestore.firestore()
}

可以在需要的地方在整个应用程序中使用此类,如下所示:

let services = GlobalFunctions.db.collection("services").getDocuments { (snapshot, error) in
        if let error = error {
            print(error)
        }

        guard let docs = snapshot?.documents else { return }

        for doc in docs {
            print(doc.data())
        }
    }