【问题标题】:Swift & Firestore: AppDelegate and ViewControllersSwift & Firestore:AppDelegate 和 ViewControllers
【发布时间】:2018-07-05 09:56:12
【问题描述】:

我正在尝试从我的 iOS 应用访问 Firestore 中的数据。 我安装了 Firebase/Firestore pod,并再次构建了项目。然后,我在 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())
        }
    }

但我收到以下错误:Use of unresolved identifier 'db'

如果我将以下行移动到我的 ViewController 一切都很好:

let db = Firestore.firestore()

知道为什么吗?

【问题讨论】:

  • 那你期待什么? db 是 AppDelegate 类的属性,那么它只能通过该对象访问
  • 我同意,但这是在 Firebase 文档中,我发现它令人困惑。

标签: ios swift firebase google-cloud-firestore


【解决方案1】:

因为类中任何声明的属性都只能从该类对象中访问。除非你把它变成静态的。

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

  • 在 AppDelegate 类中将其声明为静态属性。
  • 在视图控制器类中声明它绝对没问题。

【讨论】:

【解决方案2】:

创建名为“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())
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2019-10-20
    相关资源
    最近更新 更多