无错误地创建Firebase参考

时间:2017-01-30 20:08:35

标签: 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等设置的......

THANKYOU。

问题更新

感谢您@ 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)
            }
        }

    }

我认为那里的范围存在问题,因为它显示了位置*的错误,它并不知道这些变量。

如果有人可以帮助我,那将是非常好的。感谢。

Timeo酒店

更新

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

2 个答案:

答案 0 :(得分:1)

你可以这样直接:

import UIKit
import Firebase
import FirebaseDatabase

class ViewController: UIViewController {

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

    var ref = FIRDatabase.database().reference()


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



}

还要确保安装了Pod:

pod 'Firebase/Database'

答案 1 :(得分:1)

<强>问题:

您在ref中创建并初始化viewDidLoad()常量,因此只能在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)
        }
    }

}