首页 > 解决方案 > 将字典值附加到 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。

提前致谢

标签: arraysswiftdictionaryexc-bad-access

解决方案


您应该只对键进行排序,然后使用该数组从字典中进行选择并附加您的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()

推荐阅读