Позвольте мне попытаться уточнить:
Существует два (или более) варианта обновления вашего пользовательского интерфейса. Я называю их «Вручную» и «Automati c».
1) «Вручную» - запишите данные в область, используя без уведомления, а затем вручную обновите свой пользовательский интерфейс. Это будет «мгновенно», поскольку вы контролируете, когда случается
2) Automati c - записывает данные в область, а затем позволяет наблюдателю на этих данных обновлять пользовательский интерфейс на основе события, возвращенного из области. Это будет «отложено», потому что это произойдет в зависимости от времени получения события. На практике Realm чертовски быстр, поэтому «задержка» обычно незаметна. Где это может быть более применимо, во время анимации пользовательского интерфейса, где вы хотите, чтобы они запускались немедленно, вместо того, чтобы немного подождать, прежде чем начать (1/2 секунды или меньше?)
Чтобы ответить на вопрос в комментарии
Всегда ли вы перемещаете свои результаты в массив [Person] (например), когда используете Realm?
Вы редко, если вообще когда-либо, «перемещаете» результаты в массив - или используйте функции Swift для работы с объектами области.
Объекты области загружаются лениво - поэтому, если в области есть 100 000 объектов, использующих функции области для работы с объектами, сортировка и фильтрация будут иметь минимальное влияние.
Однако, как только вы реализуете функции Swift для работы с этими данными, все они загружаются как один большой кусок данных, который может перегружать устройство.
Так что взгляните на эту дополнительную причину, чтобы сохранить результаты как Результаты. Предположим, у вас есть объект области PersonClass, и вы хотите получить все объекты person, которые имеют имя Leroy.
Вот функции области
let realmResults = realm.objects(PersonClass.self).filter("first_name == 'Leroy'")
let realmResultsType = type(of: realmResults)
print(realmResultsType)
, а затем с помощью фильтра Swift
let swiftResults = realm.objects(PersonClass.self).filter { $0.first_name == "Leroy" }
let swiftResultsType = type(of: swiftResults)
print(swiftResultsType)
и затем вывод
Results<PersonClass>
LazyFilterSequence<Results<PersonClass>>
Вы заметите, что типы объектов различны. Если вы хотите добавить наблюдателя к этим объектам для отслеживания изменений, вы можете сделать это непосредственно с помощью области Результаты
self.notificationToken = self.realmResults!.observe { (changes: RealmCollectionChange) in
, но не с помощью LazyFilterSequence.