在新的Firebase 4.0版本中获取数据库参考

时间:2017-05-19 20:40:29

标签: ios swift firebase firebase-realtime-database

在Firebase 3.0+中,获取数据库引用的方法是这样的:

var ref: FIRDatabaseReference!

ref = FIRDatabase.database().reference()


ref.child("rooms").observeSingleEventOfType(.Value, withBlock: { (snapshot) in

    if snapshot.hasChild("room1"){

        print("true rooms exist")

    }else{

        print("false room doesn't exist")
    }

})

在Firebase 4.0中,命名约定已更改,但我无法使其正常工作!?

var ref: DatabaseReference!    
ref = Database.database().reference()

还有其他人遇到过这个吗?

swift编译器建议从小写数据库函数调用中删除()

如果删除它,则会抛出错误消息:

  • 数据库没有成员参考

那你怎么得到参考呢?

Pod文件:

pod 'Firebase/Core'
pod 'Firebase/Database'

4 个答案:

答案 0 :(得分:2)

需要更新firebase文档。 1.在课堂顶部导入这两个

import FirebaseCore

import FirebaseDatabase
  1. 获取数据库引用仅适用于ViewDidLoad()
  2. 覆盖func viewDidLoad(){

    super.viewDidLoad()
    var ref: DatabaseReference!
    ref = Database.database().reference()
    }
    

答案 1 :(得分:1)

您需要使用更新代码,也许编译器没有很好地建议修复

var ref: DatabaseReference!

ref = Database.database().reference()  

ref.child("rooms").observeSingleEvent(of: .value, with: { (snapshot) in

  // ...

  })

正如您所看到的,代码运行良好,请考虑pod deintegrate& pod update

enter image description here

答案 2 :(得分:0)

您的语法对我来说是正确的(对于new Firebase 4):

var ref: DatabaseReference!    
ref = Database.database().reference()

并且,查看their source code (FIRDatabase.h),您所做的一切与完美匹配

FIR_SWIFT_NAME(Database)
@interface FIRDatabase : NSObject

+ (FIRDatabase *) database FIR_SWIFT_NAME(database());

- (FIRDatabaseReference *) reference;

您确定自己使用的是最新的SDK版本吗?作为最后的手段,试试这个:

pod cache clean
rm Podfile.lock
rm -rf Pods
pod install
rm -rf DerivedData

答案 3 :(得分:0)

对于Firebase 4.0,有一个更改

  • 删除所有常量,协议名称的FIR前缀 类,枚举和类型定义。
  • 将FIRApp重命名为FirebaseApp。
  • 将FIROptions重命名为FirebaseOptions。

链接:https://firebase.google.com/docs/reference/ios/naming-migration-guide