Отфильтруйте список результатов области с помощью набора Swift или массива - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь выяснить, как удалить локально сохраненный набор сущностей, которые исключены из того, что я получаю от сервера API. В этом случае, скажем, 10 сущностей хранятся локально в области, и сервер отправляет мне 8 сущностей. 6 из них соответствуют объектам, которые у меня уже есть, 2 новые. Локально у меня есть 4 объекта, которые «устарели», потому что сервер их не предоставляет.

Конечно, я мог удалить все и сохранить новые объекты, но я пытался сделать вещи более эффективными.

Однако я не понимаю, как только я создал быстрый Набор, который представляет разницу между локальной и удаленной ситуацией, как я могу удалить локальные объекты, потому что область говорит мне, что я могу удалять только объекты, которые принадлежат области.

Я пытался работать с набором результатов, но я не могу найти способ отфильтровать объект с помощью предложения «IN», которому предоставляется набор объектов, даже если я вспоминаю, что делал что-то подобное в прошлом.

let realm = try! Realm()

try! realm.write{

let oldEvents = Array(self.events!)

var newEvents = [Event]()

for event in events{
    if let e = Mapper<Event>().map(JSONObject: event){
                        newEvents.append(e)
    }

}
//here I create a set which contains the difference between remote and local entitites, and create an Array with them
let difference = Array(Set(newEvents).subtracting(Set(oldEvents)))

//this is obviously wrong
let objToDelete = realm.objects(Event.self).filter("event in %@", difference)
realm.delete(objToDelete)

//realm.delete(difference)->this gives the error that you can delete only objects that belong to the realm

//here I would like to create or update the new events
for newEvent in newEvents{
    realm.create(Event.self, value: event, update: true)
}

}  

Буду очень признателен за любую подсказку о том, как справиться с этой ситуацией. Спасибо!

...