【问题标题】:Whats the best way to created a filtered tableview from a Firebase Database using Swift使用 Swift 从 Firebase 数据库创建过滤表视图的最佳方法是什么
【发布时间】:2023-03-30 15:49:01
【问题描述】:

我有一个表格视图,它显示从 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: "")
}   
}

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

【问题讨论】:

  • filter 应用到songs 数组后是否出现任何错误?
  • 你在哪里以及如何声明lower var?并分享你Song课堂。
  • @Igor 我刚刚更新了问题以添加lower
  • @triple.s 在尝试实现类 Song 并使用它来生成 tableview 之后,我得到了一个 fatal error: unexpectedly found nil while unwrapping an Optional value。我什至还没有尝试应用过滤器,因为那太糟糕了。
  • 试试print(filteredSongs)。你得到什么日志?

标签: ios swift uitableview firebase-realtime-database


【解决方案1】:

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

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

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

如您所见,它很丑。不要这样做。

【讨论】:

    【解决方案2】:

    您在代码的另一部分有问题,而不是您分享的。

    下一个断点,逐行执行代码。你找到一条线,它抛出异常。如果有问题,请分享这行代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      • 2019-10-30
      • 2021-03-04
      相关资源
      最近更新 更多