我想创建一个字典,其中键可以是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
为零。
有人可以指出我在做什么吗?
答案 0 :(得分:0)
您的字典一开始是空的。因此,每次对dictionary[someKey]
的调用都会返回nil
。这导致append(obj)
永远不会被调用,并且字典仍然为空。
访问密钥时提供默认值:
dictionary[obj.objOfABC ?? ABC(), default: []].append(obj)