0

这是我想要实现的伪代码:

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()

更新:回答一个常见问题...

问题:为什么我需要这个?

答:场景有点复杂,但可以归结为最基本的细节。我正在将文件(音频、视频、声音)上传到远程存储。上传文件后,我有一种机制(侦听器)可以知道我的文件何时在那里,我不需要本地对象来告诉我状态。我将本地对象添加到全局集合中,以使它们保持活动状态,直到文件上传(一个对象代表每个文件)。每个对象负责上传的每个文件。我希望上传完成后,我的每个对象都会从全局集合中静默删除(原因如上所述)。

4

2 回答 2

2

除非你:

一个。自己实现这个方法。

湾。将集合作为参数传入。

C。让对象的方法将remove(self)消息转发到集合。

鉴于无论如何您都必须将消息转发到集合,并且在调用该方法时您必须知道集合,因此这种方法没有任何价值。它增加了复杂性而不增加任何价值。

另一个问题是对象可以是多个集合的成员。在这种情况下应该怎么办?是否应该从它所属的所有集合中删除它?它被添加到的第一个?最后?你将如何追踪它?

总而言之,这似乎是一个不劳而获的主张。

于 2018-12-29T03:26:15.303 回答
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)
    }
}
于 2018-12-29T05:30:51.037 回答