[英]Sorting an array of Dictionaries in swift and getting operator can't be applied to Any
我正在嘗試按其timeStamp
值將Dictionaries
的array
從最新到最舊排序
錯誤:二進制運算符'<'無法應用於兩個'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.