Как создать словарь с ключом в качестве подкласса NSObject и значений в виде массива? стриж - PullRequest
0 голосов
/ 18 июня 2019

Я хочу создать словарь, в котором ключами может быть любой подкласс NSObject, а значением является массив подкласса NSObject.

Я пробовал:

class ABC: NSObject {
    var a: Int? = 0

    convenience init(a: Int) {
        self.init()
        self.a = a
    }
}

class XYZ: NSObject {
    var b: String? = "just checking"
    var objOfABC: ABC?

    convenience init(b: String, obj: ABC) {
        self.init()
        self.b = b
        self.objOfABC = obj
    }
}

let arr = [ XYZ(b: "str1", obj: ABC(a: 1)),
            XYZ(b: "str2", obj: ABC(a: 2)),
            XYZ(b: "str4", obj: ABC(a: 1)),
            XYZ(b: "str7", obj: ABC(a: 3)),
            XYZ(b: "str0", obj: ABC(a: 1)),
            XYZ(b: "str9", obj: ABC(a: 2)),
          ]


var dictionary: [ABC: [XYZ]] = [:]

for obj in arr {
    dictionary[obj.objOfABC ?? ABC()]?.append(obj)
}

for obj in dictionary {
    print(obj.key.debugDescription)
    print(obj.value.debugDescription)
}

The dictionary ноль.

Может кто-нибудь указать мне, что я делаю неправильно?

1 Ответ

0 голосов
/ 18 июня 2019

Ваш словарь начинается пустым. Таким образом, каждый вызов dictionary[someKey] будет возвращать nil. Это приводит к тому, что append(obj) никогда не вызывается, а словарь остается пустым.

Укажите значение по умолчанию при доступе к клавишам:

dictionary[obj.objOfABC ?? ABC(), default: []].append(obj)
...