swift - 按字母顺序对字典进行排序 无法将类型 '[(key: String, value: AnyObject)]' 的值分配给类型 'Dictionary<String, AnyObject>?'

标签 swift

我有这本词典,是从网络服务获取的:

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! Dictionary<String, AnyObject>

现在我尝试按字母顺序对它们进行排序:

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

但我收到此错误:

Cannot assign value of type '[(key: String, value: AnyObject)]' to type 'Dictionary?'

我做错了什么?

这就是我定义communityArray的方式:

var communityArray: Dictionary<String, AnyObject>?

最佳答案

正如评论中提到的,字典(包含键值对的集合类型)根据定义是无序的,无法排序。

应用于字典的collectionsorted函数以字典为例

["foo" : 1, "bar" : false]

作为元组数组

[(key : "foo", value : 1), (key : "bar", value : false)]

并按键 (.0) 或值 (.1) 对它们进行排序(我怀疑按值 Any 排序会引发编译器错误)

发生此错误的原因是您无法将元组数组分配给声明为字典的变量。这几乎就是字面上的错误消息。

作为妥协,我建议将字典映射到自定义结构(类似于元组,但更好处理)

struct Community {
    let key : String
    let value : Any
}

您的变量名称已经暗示您想要一个真实数组

var communityArray = [Community]()

let json = try JSONSerialization.jsonObject(with: data!) as! Dictionary<String, Any>
communityArray = json.map { Community(key: $0.0, value: $0.1 }.sorted { $0.key < $1.key } 

关于swift - 按字母顺序对字典进行排序 无法将类型 '[(key: String, value: AnyObject)]' 的值分配给类型 'Dictionary<String, AnyObject>?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57551344/

相关文章:

swift - Firebase 离线支持 : upload posts while user is offline and sync when user comes online in iOS Swift app

ios - 我是否需要 ios sdk 7.0 才能使用 swift 在 xcode 6 beta 中开发 ios 7 应用程序

swift - Firebase 中的随机个人资料图片

android - 如何在 Swift 中新建一个类型为其他类的参数?

ios - 如何在将数据添加到数据库后立即从 Core Data 中获取数据

ios - Swift如何使用nil属性创建和测试对象?

swift - 初始化 NSXMLDocument 时出现额外参数错误

c++ - 使用 objective-c 框架的 Swift 项目

ios - 在 Swift 中向 UIAlertController 添加共享操作

swift - 无法将 UICollectionViewCell 集中在 UITableViewCell 中