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

问题描述 投票:0回答:2

我有一个[String: Object]类型的字典,其中MyObjectAnotherObject的数组。我需要对它进行排序,因为我需要在每个部分用Keys.countnumber部分和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: {$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]

所以键是数字(代表天),每天都有一个Object(至少)一个另一个Object。我从API中获取了JSON。

提前致谢

arrays swift dictionary exc-bad-access
2个回答
4
投票

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

2
投票

您根本不使用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%安全的,因为密钥明显存在。

© www.soinside.com 2019 - 2024. All rights reserved.