Swift 4 Dictionary [String:AnyObject]按字母顺序按键排序

时间:2018-06-13 14:56:32

标签: ios swift

我有一个定义为[String:AnyObject]的字典,如下所示:

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject]

现在我试图按键按字母顺序排列。我尝试过以下方法:

self.appDelegate.communityArray = json.sorted(by: { $0.0 < $1.0 })

但是我收到了这个错误:

  

无法指定类型&#39; [(键:字符串,值:AnyObject)]&#39;的值至   键入&#39; [String:AnyObject]?&#39;

我做错了什么?

我的变量json是:

({"BBB" : Array("aaa", "bbb", "ccc")}, {"AAA" : Array("aaa", "bbb", "ccc")})

我想要的是:

({"AAA" : Array("aaa", "bbb", "ccc")}, {"BBB" : Array("aaa", "bbb", "ccc")})

3 个答案:

答案 0 :(得分:1)

您的communityArray类型错误。如错误所述,您需要的类型是[(key: String, value: AnyObject)](元组数组)。

答案 1 :(得分:1)

我认为第一步是改变

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject]

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : Any]

但我无法理解为什么要对字典进行排序..也许你打算将变量json声明为Array?

答案 2 :(得分:0)

由于您还没有提供实际的JSON,我将不得不猜测一下。但正如其他人告诉你的那样,你不应该依赖Dictionary中的键顺序。您始终可以对键进行排序,并相应地访问Dictionary。由于sorted将返回Array,因此以下游乐场应向您显示效果:

import Cocoa

let jsonData = """
    {"BBB" : ["aaa", "bbb", "ccc"], "AAA" : ["aaa", "bbb", "ccc"]}
""".data(using: .utf8)!

do {
    let dict = try JSONSerialization.jsonObject(with: jsonData, options:.allowFragments) as! [String : Any]
    print(dict)
    let array = dict.sorted(by: {$0.0 < $1.0})
    print(array)
    print(type(of:array))
} catch {
    print(error)
}

我建议你修改你的结构定义,以便像

那样划线
let dict = try JSONDecoder().decode([String:Any].self, from:jsonData)

do内工作。此行不起作用,因为Any无法实现Codable,因此应将其替换为&#34;真品&#34;。当前版本会在NSArray中为您提供dict个对象,这些对象很难处理。您的代码将从正确的定义(如果可能)中受益匪浅。