如何用key作为NSObject的子类并以value作为数组来创建字典?迅速

时间:2019-06-17 21:44:05

标签: arrays swift dictionary data-structures

我想创建一个字典,其中键可以是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)
}

dictionary为零。

有人可以指出我在做什么吗?

1 个答案:

答案 0 :(得分:0)

您的字典一开始是空的。因此,每次对dictionary[someKey]的调用都会返回nil。这导致append(obj)永远不会被调用,并且字典仍然为空。

访问密钥时提供默认值:

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