arrays - 将字典值附加到 Swift 中的数组
问题描述
我有一个类型的字典
[String: Object]
,其中MyObject
是一个数组AnotherObject
。我需要对其进行排序,因为我需要用每个部分中Keys.count
的部分数和行数填充 UITableView。Object.count
我将所有键放在一个数组中,但是当我尝试将值附加到另一个数组中时,我得到Thread 1: EXC_BAD_ACCESS (code=1, address=0x8)
.
这是我正在使用的代码
var dictionary = [String: MyObject]()
var sortedKeys: [String]?
var sortedValues = [MyObject]()
func sortItems() {
self.sortedKeys = self.dictionary.keys.sorted(by: >)
let sortedDict = self.dictionary.sorted(by: {$0.key > $1.key})
for (_, value) in sortedDict {
print(value)
self.sortedValues.append(value)
}
}
在 for 循环中,当我不尝试将值附加到数组时,它会打印所有排序的值,当我想将它们放在数组中时问题就来了。
编辑
字典是这样的:
struct Object: Decodable {
let elements: [AnotherObject]
}
struct AnotherObject: Decodable {
let time, Id, Status: Int?
let date, startTime, endTime: String?
}
dictionary: [String: Object]
所以键是数字(代表天数),每天都有一个对象(至少)一个另一个对象。我从 API 获取 JSON。
提前致谢
解决方案
您应该只对键进行排序,然后使用该数组从字典中进行选择并附加您的sortedValues
数组。我把它sortedKeys
变成了一个局部变量
func sortItems() {
let sortedKeys = self.dictionary.keys.sorted(by: >)
for key in sortedKeys {
if let obj = dictionary[key] {
self.sortedValues.append(obj)
}
}
}
我不知道这是否会对崩溃产生影响,但另一种方法是让函数返回一个数组
func sortItems() -> [Object] {
let sortedKeys = self.dictionary.keys.sorted(by: >)
var result: [Object]()
for key in sortedKeys {
if let obj = dictionary[key] {
result.append(obj)
}
}
return result
}
然后调用它
self.sortedValues = sortItems()
推荐阅读
- javascript - React 的 setState 不会改变状态和更新组件
- java - 从 Android 中的设备 Mac 地址 (RARP) 获取 IP 地址
- scala - 从火花流中另一列的不同行派生列值
- c# - mysql-c#连接未完成
- android - 使用 adb 的 WIFI 连接
- linux - 增加变量号并分配新值
- wordpress - 如何修复此 WooCommerce / WordPress 错误?
- c++ - 跨平台 SIMD 调用可能只需要一个可执行文件?
- reactjs - 我们如何根据条件显示或隐藏 OverReact(使用 dart 构建反应组件的库)中的组件?
- python - Python mongoengine QuerySet 返回意外的值