以下是我要实现的伪代码:
let a = AClass()
let go = NSMutableArray()
go.add(a)
.
.
.
class AClass{
.
.
.
fileprivate func removeMyselfFromCollection() { //Called from within the class
//TODO: How to remove myself from the collection I am in.
}
}
可以是任何集合,数组或字典等。类似于removeFromSuperview()
更新:正在回答一个常见问题...
问题:为什么我需要这个?
答案:场景有点复杂,但是将其归结为最基本的细节。我正在将文件(音频,视频,声音)上传到远程存储。文件上传后,我便有了一种机制(侦听器)来知道文件何时存在,而无需本地对象来告诉我状态。我将局部对象添加到全局集合中,以使它们保持活动状态,直到文件上传为止(一个对象代表每个文件)。每个对象负责每个上传的文件。我希望我的每个对象在上传完成后都会从全局集合中静默删除自己(上述原因)。
答案 0 :(得分:2)
除非您:
a。自己实现此方法。
b。将集合作为参数传递。
c。让对象的方法将remove(self)
消息转发到集合。
鉴于您无论如何都必须将消息转发到集合,并且在调用该方法时必须知道该集合,所以这种方法没有任何价值。它增加了复杂性,却没有增加任何价值。
另一个问题是对象可以是多个集合的成员。在这种情况下应该怎么办?是否应该将其从其所属的所有集合中删除?它被添加到的第一个?最后?您将如何跟踪呢?
总而言之,这似乎是一个无痛无益的主张。
答案 1 :(得分:0)
您可以通过在NSMutableArray的扩展名中键入自己的自定义插入方法来执行此操作,并且在此方法中,可以将数组分配给对象变量。
class SomeClass {
var containedBy: NSMutableArray?
var value: String
init(value: String) {
self.value = value
}
func removeFromCollection() -> Void {
guard let containedBy = self.containedBy else { return }
containedBy.remove(self)
}
}
extension NSMutableArray{
func addRemovable(value: SomeClass) {
value.containedBy = self
self.add(value)
}
}