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

在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' 

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

 import FirebaseCore import FirebaseDatabase 
  1. 获取数据库引用仅适用于ViewDidLoad()

override func viewDidLoad(){

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

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

 var ref: DatabaseReference! ref = Database.database().reference() ref.child("rooms").observeSingleEvent(of: .value, with: { (snapshot) in // ... }) 

正如您所看到的,代码完美运行,考虑pod deintegratepod update

在此处输入图像描述

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

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

并且,查看他们的源代码( 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 

对于Firebase 4.0,有一个变化

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

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