如何通过swift中的子项解析我的firebase数据

时间:2017-09-30 16:59:41

标签: swift firebase-realtime-database

非常感谢任何帮助

Swift 4.0 Xcode9

我想获得作业描述的标题,并用它填充我的tableView。我已经尝试了很多方法,但我不能让它工作,因为"孩子"在我的代码中没有成员。我可以打印但是就是这样。

当我将数据打印到控制台时,它看起来像附加的图像。所以我得到了数据。

enter image description here

我的代码如下所示:

{

@IBOutlet weak var jobPostsTableView: UITableView!


//Set the Firebase Reference
var ref = Database.database().reference()

var searchJSONQuery : String = ""

var jobsData = [String]()

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return jobsData.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell")
    cell?.textLabel?.text = jobsData[indexPath.row]
    return cell!
}


func retrieveJobTitles() {

    let positionRef = ref.child("positions")

    positionRef.observeSingleEvent(of: .value, with: { (snapshot) in

        // Iterate through all of your positions
        for child in snapshot.children {
            let positionsInfo = child.value as! [String: Any]

            let jobTitle = positionsInfo["title"] as! String

            if jobTitle != nil {
                self.jobsData.append(jobTitle)
            }
        }

        self.jobPostsTableView.reloadData()


    })
}



override func viewDidLoad() {
super.viewDidLoad()

    // Do any additional setup after loading the view, typically from a nib.

    jobPostsTableView.delegate = self
    jobPostsTableView.dataSource = self

    retrieveJobTitles()


}
}

child.value给出错误:

Value of type 'Any' has no member 'value'

1 个答案:

答案 0 :(得分:0)

您的数据库JSON结构应与此类似

enter image description here

我要做的第一件事就是创建一个NSObject类,它基本上可以保存我数据库中的所有值。在此示例中,我想解析string "C"datemessage

name

在TableViewController类中,创建一个NSObject类的实例,然后创建一个从firebase检索数据的函数。

class MyObjects: NSObject { var date: AnyObject! var message: AnyObject! var name: AnyObject! }

var myObject = [MyObject]()

要使用它,只需 func retrieveData() { Database.datanase().reference().child("todo").observe(.childAdded, with: { (snapshot) in let dict = snapshot.value as! [String : AnyObject] let object = MyObject() object.setValuesForKeys(dict) self.myObject(object) DispatchQueue.main.async(execute: { self.tableView.reloadData() }) }) } myObject.datemyObject.name