什么是使用Swift从Firebase数据库创建过滤后的tableview的最佳方法

时间:2016-07-14 17:08:23

标签: ios swift uitableview firebase-realtime-database

我有一个tableview,显示从包含以下结构的Firebase数据库中提取的歌曲的标题:

{
  "songs" : {
    "key1" : {
      "lyrics" : "...",
      "title" : "...",
      "video" : "..."
    }
  }
}

如果我将firebase数据添加到名为Song的类中,那么我想我可以这样做:

var songs = [Song]()
var filteredSongs = [Song]()

let lower = searchBar.text!.lowercaseString
filteredSongs = songs.filter({$0.title.rangeOfString(lower) != nil})

但是,在按照此问题的解决方案示例后,我没有成功做到这一点:convert FIRDataSnapshot to custom type

class Song: NSObject {
 var title: String
 var lyrics: String
 var videoUrl: String
let ref: FIRDatabaseReference?

init(title: String, lyrics: String, videoUrl: String) {
    self.title = title
    self.lyrics = lyrics
    self.videoUrl = videoUrl
    self.ref = nil
}

init(snapshot: FIRDataSnapshot) {
    title = snapshot.value!["title"] as! String
    lyrics = snapshot.value!["lyrics"] as! String
    videoUrl = snapshot.value!["video"] as! String
    ref = snapshot.ref
}

convenience override init() {
    self.init(title: "", lyrics: "", videoUrl: "")
}   
}

有没有办法在不创建类的情况下添加过滤器?

2 个答案:

答案 0 :(得分:0)

最好将您的JSON转换为模型层中的结构/类,以便在Controller层中更容易使用。

除此之外,您可以执行以下操作:

json.value!["songs"].filter{ ($0.value!["title"] as! String).rangeOfString(lower) != nil}

正如你所看到的,它很难看。不要这样做。

答案 1 :(得分:0)

您在代码的其他部分遇到问题,而不是分享。

放置一个断点并逐行执行代码。你找到了一条引发异常的行。如果有问题,请分享这行代码。