将字典值附加到 Swift 中的数组

Appending dictionary values to array in Swift

我有一个类型的字典 [String: Object],其中 MyObjectAnotherObject 的数组。我需要对其进行排序,因为我需要用 Keys.count 个部分和每个部分中的 Object.count 行数填充 UITableView。我将所有键都放在一个数组中,但是当我尝试将值附加到另一个数组时,我得到 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: {[=11=].key > .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

提前致谢

您应该只对键进行排序,然后将该数组用于字典中的 select 并附加您的 sortedValues 数组。我把 sortedKeys 变成了局部变量

func sortItems() {
    let sortedKeys = self.dictionary.keys.sorted(by: >)

    for key in sortedKeys {
        if let obj = dictionary[key] {
            self.sortedValues.append(obj)
        }
    }
}

我不知道这是否会对崩溃产生影响,但另一种方法是让函数 return 成为数组

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()

你根本不使用 sortedKeys 并且字典排序的结果是元组的 数组 所以字典枚举语法 for (key, value) in 是错

可能你想要这个

func sortItems() {

    let sortedKeys = self.dictionary.keys.sorted(by: >)

    for key in sortedKeys {
        let value = self.dictionary[key]!
        print(value)
        self.sortedValues.append(value)
    }
} 

强制解包该值是 100% 安全的,因为密钥显然存在。