我在Swift 3中排序字典數組。Swift 3,排序字典數組
在斯威夫特2,我會做這種方式,它工作得很好:
var dicArray = [Dictionary<String, String>()]
let dic1 = ["last": "Smith", "first": "Robert"]
dicArray.append(dic1)
let dic2 = ["last": "Adams", "first": "Bill"]
dicArray.append(dic2)
let sortedArray = dicArray.sort { ($0["last"] as? String) < ($1["last"] as? String) }
轉換相同的代碼來斯威夫特3已經並不順利。引導我到這(通過迂迴路線)系統:
let sortedArray = dicArray.sorted { ($0["last"]! as String) < ($1["last"]! as String) }
但應用老是死機,並出現錯誤,它發現零而展開的可選值。 ?!
敲我的頭靠在桌子太久,把S和S在每一個可以想象的組合後,我使出老辦法來完成這項工作:
let sortedArray = (dicArray as NSArray).sortedArray(using: [NSSortDescriptor(key: "last", ascending: true)]) as! [[String:AnyObject]]
這工作,我一起前進,但它不是非常Swifty,是嗎?
這一切都出錯了?我怎樣才能使純Swift排序功能在這樣的情況下工作?
如果你有一組靜態鍵,你肯定應該使用一個結構而不是字典。 – Alexander
正如@亞歷山大寫道的,使用一個結構:如果關鍵字不是靜態的,上面的排序是非常脆弱的w.r.t.運行時安全性,並且應該驗證字典數組中的所有字典確實包含關鍵「最後」,例如,檢查'dicArray.contains(其中:{!$ 0.keys.contains(「last」)})'不是'true'。如果你首先加入了這樣一名警衛,那麼你會發現空的額外字典,因爲這會違反輸入驗證。 – dfri