更新日期排序备选方案

时间:2016-09-29 12:34:25

标签: ios swift firebase firebase-realtime-database swift3

我目前正在尝试更新几个月前购买的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)

1 个答案:

答案 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的方式进行操作可能是一个好主意。

请参阅我之前问题的答案

Swift 3 Firebase update code convertion - sorting