Swift 4: может ли объект удалить себя из коллекции - PullRequest
0 голосов
/ 29 декабря 2018

Вот псевдокод того, чего я хочу достичь:

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

Обновление:Отвечая на общий вопрос ...

Вопрос: Зачем мне это нужно?

Ответ: Сценарий немного сложен, но сводит его к большинству основных деталей.Я загружаю файлы (аудио, видео, звук) в удаленное хранилище.Как только файлы загружены, у меня есть механизм (слушатели), чтобы узнать, когда мои файлы там, мне не нужны локальные объекты, чтобы сообщить мне статус.Я добавляю локальные объекты в глобальную коллекцию, чтобы они оставались в живых до тех пор, пока файлы не будут загружены (один объект представляет каждый файл).Каждый объект заботится о каждом загружаемом файле.Мне бы хотелось, чтобы каждый из моих объектов автоматически удалялся из глобальной коллекции после завершения загрузки (причина объяснена выше).

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Вы можете сделать это, введя свой собственный метод вставки в расширение 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)
    }
}
0 голосов
/ 29 декабря 2018

Не, если вы:

a.Реализуйте этот метод самостоятельно.

b.Передайте коллекцию в качестве параметра.

с.Попросите метод объекта переслать сообщение remove(self) в коллекцию.

Учитывая, что вам все равно придется просто переслать сообщение в коллекцию, и вам нужно будет знать коллекцию во время вызоваметод, нет значения в таком методе.Это добавляет сложности без добавления какого-либо значения.

Другая проблема состоит в том, что объекты могут быть членами более чем одной коллекции.Что должно произойти в этом случае?Должен ли он быть удален из всех коллекций, к которым он принадлежит?Первый, к которому он был добавлен?Последний?И как бы вы это отследили?

В общем, это похоже на предложение «все безболезненно».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...