Как обновить / удалить объект в индексе с помощью Realm?

#swift #realm

#swift #realm

Вопрос:

Сегодня я обнаружил Realm, и я с ним не знаком. Пожалуйста, помогите.

У меня есть 2 класса:

 class EventDetail: Object {
dynamic var start_time : Int = 0
dynamic var end_time   : Int = 0
convenience init(start_time: Int, end_time: Int ) {
    self.init()
    self.start_time  = start_time
    self.end_time    = end_time
}
class Channel : Object {
  dynamic var id  : Int = 0
  convenience init ( id : Int) {
       self.id = id
  }
  let details = List<EventDetail>()
}
  

Я заполняю базу данных следующим образом:

 let  realm = try! Realm()
var newChannel = Channel (id : id)
let detailEvent1 = EventDetail(start_time:10, end_time:  20)                              
let detailEvent2 = EventDetail(start_time:20,end_time: 30)
newChannel.details.append(detailEvent1)
newChannel.details.append(detailEvent2)

try! realm.write {
     realm.add(newChannel)
} 
  

Вопрос в том, как удалить / обновить данные в определенном индексе?

Пример: получить detailEvent2 из канала, где индекс = 100

Ответ №1:

Вам необходимо выполнить выборку для типа объекта, который вы хотите изменить или удалить.

Основная операция

 realm.objects(Channel.self)
  

Чтобы узнать, какие объекты вы хотите изменить или удалить, вы можете отфильтровать результат с помощью простой функции более высокого порядка и, например, предиката:

 let lateStarters = realm.objects(Channel.self).filter(NSPredicate(format: "start_time > 10", argumentArray nil))
  

и измените их свойства, перечислив через результирующий массив:

 try? realm.write({
    for channel in lateStarters {
        channel.start_time = 100
    }
})