首页 > 解决方案 > 如何创建一个字典,键作为 NSObject 的子类,值作为数组?迅速

问题描述

我想创建一个字典,其中键可以是任何子类,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零。

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

标签: arraysswiftdictionarydata-structures

解决方案


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

访问密钥时提供默认值:

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

推荐阅读