我有一个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: "")
}
}
有没有办法在不创建类的情况下添加过滤器?
答案 0 :(得分:0)
最好将您的JSON转换为模型层中的结构/类,以便在Controller层中更容易使用。
除此之外,您可以执行以下操作:
json.value!["songs"].filter{ ($0.value!["title"] as! String).rangeOfString(lower) != nil}
正如你所看到的,它很难看。不要这样做。
答案 1 :(得分:0)
您在代码的其他部分遇到问题,而不是分享。
放置一个断点并逐行执行代码。你找到了一条引发异常的行。如果有问题,请分享这行代码。