使用Firebase

时间:2017-01-06 23:17:01

标签: ios swift firebase firebase-realtime-database

我需要条件代码才能从Firebase读取数据。我希望条件像在SQL" WHERE project =' test'"。我用Swift写的。

我有从Firebase读取数据的代码:

var ref:FIRDatabaseReference?
var databaseHandle:FIRDatabaseHandle?
var tasks = [Task]()
var uid = (FIRAuth.auth()?.currentUser?.uid)! as String

override func viewDidLoad() {
    super.viewDidLoad()

    ref = FIRDatabase.database().reference().child("\(uid)/Tasks")

    startObservetingDB()
}

func startObservetingDB() {
    ref?.observe(.value, with: { (snapshot:FIRDataSnapshot) in
        var newSweets = [Task]()

        for sweet in snapshot.children {
            let sweetObject = Task(snapshot: sweet as! FIRDataSnapshot)
            newSweets.append(sweetObject)
        }

        self.tasks = newSweets
        self.tableView.reloadData()

    }) { (error:Error) -> Void in
        print(error.localizedDescription)
    }
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "TasksCell", for: indexPath) as! TasksCell

    let arrayTasks = tasks[indexPath.row]

    cell.taskName.text = arrayTasks.content

    return cell
}

我有这个Firebase结构:

My Firebase structure

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您可以使用以下命令获取特定项目的任务:

ref?.queryOrdered(byChild: "project").queryEqual(toValue: "test").observe(.childAdded

但您可能还想考虑您的数据结构是否适合您的使用。您最常(甚至可能总是?)似乎会显示特定项目的任务。在这种情况下,将数据存储在该结构中会更有效:

ProjectTasks
    $ProjectId (e.g. "test")
        $TaskId ("asd asd se")

顺便说一句:这个答案似乎高度相关:query & where in Firebase (swift 3)