簡體   English   中英

快速排序字典數組並獲取運算符不能應用於任何

[英]Sorting an array of Dictionaries in swift and getting operator can't be applied to Any

我正在嘗試按其timeStamp值將Dictionariesarray從最新到最舊排序

錯誤:二進制運算符'<'無法應用於兩個'Any?' 操作數

timeStamp值作為Int保存到Dictionary

timeStamp = inviteDict["timeStamp"] as? Int

字典:

[
"type": "invite",
"complimentId": key,
"status": status,
"timeStamp": timeStamp!,
 "fromUser": user
]

功能-結合了兩個arrays元組的,我需要的那種array通過timeStamp通過傳遞前handler

    func getInvitesAndCompliments(forUserId forId: String, handler: @escaping ([[String : Any]], Bool) -> ()){

            var invitesAndCompliments = [[String : Any]]()

            var invites = [[String : Any]]()

            var compliments = [[String : Any]]()

            getComplimentsReceived(forUserId: forId) { (complimentsDict, success) in
                invitesAndCompliments.removeAll()
                compliments = complimentsDict
                invitesAndCompliments = invites + compliments
                handler(invitesAndCompliments, true)
            }

            getInvitesReceived(forUserId: forId) { (invitesDict, success) in
                invitesAndCompliments.removeAll()
                invites = invitesDict
                invitesAndCompliments = compliments + invites

                //sort array by timeStamp value
                let sorted_invitesAndCompliments = invitesAndCompliments.sorted(by: { $0["timeStamp"] < $1["timeStamp"] })

                handler(sorted_invitesAndCompliments, true)
            }


        }//end func

如下更新代碼:

let sorted_invitesAndCompliments = invitesAndCompliments.sorted { ($0["timeStamp"] as! Int) < ($1["timeStamp"]  as! Int)}

希望這對您有用。

從字典中獲取值的結果始終是Any? ,您必須降低類型

let sorted_invitesAndCompliments = invitesAndCompliments.sorted(by: { ($0["timeStamp"] as! Int) < $1["timeStamp"] as! Int })

為了避免這種情況,請使用自定義結構。

我建議不要使用強制轉換,如果值為空,則可能會崩潰。 檢查以下代碼:

let sorted_invitesAndCompliments = invitesAndCompliments.sorted(by: {
    guard let timestamp1 = $0["timeStamp"] as? Int else {return false}
    guard let timestamp2 = $1["timeStamp"] as? Int else {return false}
    return timestamp1 < timestamp2
})

正如vadian建議在這種情況下使用自定義結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM