我目前正在尝试更新几个月前购买的Udemy课程的代码,该课程完全适用于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)
答案 0 :(得分:0)
问题的具体答案:什么是替代品(在Swift 3中):
let sorted = ((snapshot!.value! as AnyObject).allValues as NSArray)
.sortedArray(using: [NSSortDescriptor(key: "date", ascending: false)])
此外,发布的代码基本上有效 - 尽管中最近的排序部分中的代码对于Swift 3来说是不正确的。
该部分中的最近[“chatRoomID”]可能是个问题,因为 sorted 中的数据可能不是字符串 - 它们可能是字典。这取决于您的Firebase结构。
最后,减少您对NSSortDescriptors等的依赖并以更加Swifty的方式进行操作可能是一个好主意。
请参阅我之前问题的答案