ios - 正确创建 Firebase 引用

标签 ios swift firebase firebase-realtime-database

我目前在为我的 iOS 应用程序创建适当的 Firebase 引用时遇到问题。我一整天都遇到了这个问题,只是找不到解决方法。

import UIKit
import Firebase
import FirebaseDatabase

class ViewController: UIViewController {

    @IBOutlet var remoteSwitch: UISwitch!
    @IBOutlet var label: UILabel!

    var ref: FIRDatabaseReference!

    //That's where i get the Error ! --> Expected declaration
    ref = FIRDatabase.database().reference()

    override func viewDidLoad() {
        super.viewDidLoad() 
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

如果有人能告诉我如何在 iOS 10、Xcode 8 中正确分配 Firebase 数据库引用,那就太好了。

至此,Firebase 设置成功。没有错误,一切都用 podfile 等设置...

谢谢。

问题更新

感谢@ronatory 提供的在 viewDidload 中创建引用的提示。那奏效了。

我现在可以从 viewDidLoad 函数写入 Firebase。 但是当我想分配额外的 UI 开关以将数据写入数据库时​​,我仍然遇到问题。

    import UIKit
    import Firebase
    import FirebaseDatabase

    class ViewController: UIViewController {

        @IBOutlet var remoteSwitch: UISwitch!
        @IBOutlet var label: UILabel!

        override func viewDidLoad() {
            super.viewDidLoad()
            let ref = FIRDatabase.database().reference()
            ref.child("timeo").setValue(true)
        }

        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }

        @IBAction func switched(_ sender: UISwitch) {
            if remoteSwitch.isOn == true {
                label.text = "ON"
//location *
                ref.child("timeo").setValue(true)
            }
            else {
                label.text = "OFF"
//location *
                ref.child("timeo").setValue(false)
            }
        }

    }

我认为那里的作用域有问题,因为它在位置 * 处显示错误,它不知道这些变量。

如果有人可以帮助我,那就太好了。谢谢。

时间

更新

That's the Error I get when declaring the Reference in the

最佳答案

问题:

您在 viewDidLoad() 中创建并初始化了 ref 常量,因此它仅在 viewDidLoad() 的范围内可用.

解决方案:

要在其他方法(如 switched(_:) 方法)中访问它,您需要创建一个类型为 FIRDatabaseReference 的引用,然后您可以在viewDidLoad() 之后可以设置您的值(提示在代码注释中):

import UIKit
import Firebase
import FirebaseDatabase

class ViewController: UIViewController {

    @IBOutlet var remoteSwitch: UISwitch!
    @IBOutlet var label: UILabel!

    // create the reference here
    var ref: FIRDatabaseReference!

    override func viewDidLoad() {
        super.viewDidLoad()
        // initialize your reference
        ref = FIRDatabase.database().reference()
        ref.child("timeo").setValue(true)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func switched(_ sender: UISwitch) {
        if remoteSwitch.isOn == true {
            label.text = "ON"
            // now you should be able to access your reference here
            ref.child("timeo").setValue(true)
        }
        else {
            label.text = "OFF"
            // now you should be able to access your reference also here
            ref.child("timeo").setValue(false)
        }
    }

}

关于ios - 正确创建 Firebase 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41944536/

相关文章:

ios - addCooperativeAnimations 动画 block 未运行

ios - 我怎样才能确保我的 guard 语句不会以 nil 值继续?

ios - 如何在swift4中从json数组获取值

ios - 如何在 Swift 中使用 MapKit 在两个位置之间绘制路线?

javascript - 如何创建一个 URL,当点击该 URL 时批准或将名称添加到 firebase 中的列表?

ios - 在 subview 上绘制矩形?

ios - 给定我的代码格式,如何在我的 TableView 中加载动态图像?

ios - 使用数组项属性值显示在 UITableView/UICollectionView 中

arrays - 获取我的 Firebase 数据库的一部分中的所有子键并显示在 TableView 上

java - 我想获得用户的唯一ID。我如何使用 getKey 方法获取它