这更多是为了感兴趣而不是问题,但是我有一个NSMutableSet
,从UserDefaults
中检索到,我的目标是追加一个项目并将其写回。我正在使用NSMutableSet
,因为我只想要插入独特的项目。Swift - 检测项目是否插入到NSMutableSet中
要插入的对象的类型是一个自定义类,我已经覆盖了hashCode
和isEqual
。
var stopSet: NSMutableSet = []
if let ud = UserDefaults.standard.object(forKey: "favStops") as? Data {
stopSet = NSKeyedUnarchiver.unarchiveObject(with: ud) as! NSMutableSet
}
stopSet.add(self.theStop!)
let outData = NSKeyedArchiver.archivedData(withRootObject: stopSet)
UserDefaults.standard.set(outData, forKey: "favStops")
NSLog("Saved to UserDefaults")
我得到的设置,调用mySet.add(obj)
然后编写组回UserDefaults。一切似乎都很好,并且(据我所知)似乎没有重复。
但是,是否有可能判断对mySet.add(obj)
的调用是否实际上导致将项目写入集合。 mySet.add(obj)
没有返回值,如果您使用Playgrounds(而不是项目),则在右侧的输出中显示该集是否实际上是基于方法调用而更改的。
我知道集并不意味着存储重复的对象,所以理论上我应该相信这一点,但我只是想知道该集是否返回了可以访问的响应 - 而不是在插入前获取长度之后如果我真的想知道!
谢谢你,当我在操场玩耍,我使用'Set',它给了我所示方法签名的回应。 由于某种原因,我并不认为'Set'符合'NSCoding',所以这就是为什么我使用桥接变体 - 但它看起来像它(现在?!) – jeonatl3
你是对的,它不符合默认情况下为'NSCoding',但是当Element可以连接到Foundation时或者当Element是一个类时,它可以桥接到NSSet,因为对于你的情况Element是Data类型既是一个类,也可以桥接到'NSData',因此编译器会自动处理它。 –