我目前正在尝试更新几个月前购买的 Udemy 类(class)的代码,该类(class)在 Swift 2.2 版本中完全运行。然而,我对这个特定的功能有问题,它实际上只是排序和显示最近的聊天(带预览)。
这是代码:
func loadRecents() {
firebase.child("Recent").queryOrderedByChild("userId").queryEqualToValue(backendless.userService.currentUser.objectId).observeEventType(.Value, withBlock: {
snapshot in
self.recents.removeAll()
if snapshot.exists() {
let sorted = (snapshot.value!.allValues as NSArray).sortedArrayUsingDescriptors([NSSortDescriptor(key: "date", ascending: false)])
for recent in sorted {
self.recents.append(recent as! NSDictionary)
firebase.child("Recent").queryOrderedByChild("chatRoomID").queryEqualToValue(recent["chatRoomID"]).observeEventType(.Value, withBlock: {
snapshot in
})
}
}
self.tableView.reloadData()
})
}
我在这里收到错误:
let sorted = (snapshot.value!.allValues as NSArray).sortedArrayUsingDescriptors([NSSortDescriptor(key: "date", ascending: false)])
我相信 sortedArrayUsingDescriptors
已被弃用,但我仍然不确定。什么可以替代当前的代码?
提前致谢!
更新:
这是我收到的错误:
THread 1: EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP, subcode=0x0)
最佳答案
问题的具体答案:什么是替代(在 Swift 3 中):
let sorted = ((snapshot!.value! as AnyObject).allValues as NSArray)
.sortedArray(using: [NSSortDescriptor(key: "date", ascending: false)])
此外,发布的代码基本上可以工作 - 尽管 forcentre insorted 部分内的代码对于 Swift 3 格式不正确。
该部分中的最近[“chatRoomID”]可能是一个问题,因为排序中的数据可能不是字符串 - 它们可能是字典。这取决于您的 Firebase 结构。最后,减少对 NSSortDescriptors 等的依赖并以更快速的方式完成它可能是一个好主意。
查看我对您之前问题的回答
关于ios - 更新日期排序替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39770489/