Realm предоставляет несколько способов обновить свойства объектов.
Многое из этого ответа зависит от варианта использования - в данном примере кажется, что вы пытаетесь обновить свойство известного объекта, который имеетсуществующий первичный ключ.
Начиная с DiscountClass - одна мысль состоит в том, что offerName, вероятно, не будет хорошим первичным ключом;Что делать, если у вас есть два предложения с одинаковым названием «10% скидка» является распространенным явлениемВам лучше использовать UUID, а затем иметь предложение в виде текста внутри объекта.
class DiscountClass: Object {
@objc dynamic var discount_id = UUID().uuidString //guaranteed unique
@objc dynamic var offerName : String = ""
@objc dynamic var percentage: Float = 0.00
override class func primaryKey() -> String? {
return "discount_id"
}
}
На основании вашего вопроса, похоже, что они представлены в списке (tableView?), Который будет поддерживатьсяdataSource, обычно массив или для Realm, объект Results, который также работает.
var discountResults = Results<DiscountClass>
Когда пользователь выбирает строку для редактирования, этот индекс строки будет соответствовать индексу в discountResults. Я не знаю, как вы редактируете, поэтому давайте просто скажем, что когда пользователь выбирает строку, он может редактировать процент. Когда они завершены, обновление становится очень простым
try! realm.write {
thisDiscount.percentage = "0.1" //updates this objects percent to 10%
}
Поскольку это известный объект, вы специально обновляете этот процент объектов, и он не будет создавать другой объект.
Если вы находитесь вВ ситуации, когда вы можете добавить новый объект вместо обновления существующего, вы можете использовать параметр realm.create и указать либо .modified, либо .all для параметра update. Отмечая, что .all может иметь много накладных расходов, так что, как правило, предпочтение отдается .modified.
Принимая во внимание, что для использования realm.create вам необходимо создать объект и назначить существующий первичный ключ, если вы хотите обновитьили новый уникальный первичный ключ, если вы хотите его создать.
Дополнительную информацию и полное объяснение см. в документации: Обновление объектов с помощью первичных ключей