如何从Firebase向阵列添加数据

时间:2016-01-31 16:27:30

标签: ios database swift firebase

我尝试使用Firebase框架并在我的应用中使用它,但我遇到了一个问题,如何从firebase检索数据并将其保存在我自己的数组中。 Firebase结构非常简单,看起来像这样: enter image description here

现在我的代码看起来像这样:

`var rootRef = Firebase(url: "https://mathgamepio.firebaseio.com/")


var array:[String]?
var count: Int = 0

override func viewDidLoad() {
    super.viewDidLoad()



    rootRef.observeEventType(.ChildAdded) { (snap: FDataSnapshot!) -> Void in


        self.count++
        let math = snap.value["math"] as! String
        print(self.count)
        print(math)


        self.array?.append(math)
        print(self.array)
        print("--------")

    }`

此操作的结果如下:

enter image description here

self.array.append不起作用,始终为nil。如何将这些数据添加到我自己的数组?

1 个答案:

答案 0 :(得分:0)

您的数组似乎从未初始化,因此self.array?将始终跳过append

一种解决方案是检查数组是否存在:

if (self.array?.append(math)) == nil {
    self.array = [math]
}

可能有更多方法可以解决这个问题,但我修改了这个问题的答案:Adding elements to optional arrays in Swift

更新

更简单的方法是在使用之前简单地创建数组:

var array:[String]?
var count: Int = 0

override func viewDidLoad() {
    super.viewDidLoad()

    self.array = [];

    rootRef.observeEventType(.ChildAdded) { (snap: FDataSnapshot!) -> Void in


        self.count++
        let math = snap.value["math"] as! String
        print(self.count)
        print(math)

        self.array?.append(math)
        print(self.array)
        print("--------")

    }
}

或者根本不将数组标记为可选:

var array:[String] = []
var count: Int = 0

override func viewDidLoad() {
    super.viewDidLoad()

    rootRef.observeEventType(.ChildAdded) { (snap: FDataSnapshot!) -> Void in

        self.count++
        let math = snap.value["math"] as! String
        print(self.count)
        print(math)

        self.array.append(math)
        print(self.array)
        print("--------")

    }
}

TIL我学到了一些基本的Swift语法。 : - )