Как вызвать каждый метод структуры внутри транзакции записи - PullRequest
0 голосов
/ 03 декабря 2018

Я создал структуру Repository для работы с объектами базы данных Realm (изменения некоторых свойств, добавления новых объектов, удаления и т. Д.).Когда я хочу записать в базу данных, я должен сделать это внутри блока do-try-catch, поэтому я создал метод с завершением, который я вызываю каждый раз, когда мне нужно что-то записать в базу данных

private func action(_ completion: () -> Void) {
    do {
        try realm.write {
            completion()
        }
    } catch {
        print(error)
    }
}

затем я вызываю методы для манипулирования объектами следующим образом:

func createObject(_ object: MyObject) {
    action {
        realm.add(object)
    }
}

func deleteObject(_ object: MyObject) {
    action {
        realm.delete(object)
    }
}

func setTitleForObject(_ object: MyObject, title: String) {
    action {
        object.title = title
    }
}

...

У меня вопрос, есть ли способ, как я могу вызвать каждый метод внутри этой Repository структуры внутри транзакции записи в do-try-catchблокировать по умолчанию вместо вызова его внутри завершения action?(или есть какой-то лучший способ записи в базу данных Realm без блока do-try-catch?)

1 Ответ

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

Короткий ответ - нет, невозможно записать данные в область без транзакции записи и без try-catch.

realm.write() - это удобная оболочка построения транзакции с beginWrite() и commitWrite()звонки.Эти две функции создают транзакцию, и commitWrite() может быть выброшено, поэтому в любом случае вам нужно перейти к try-catch.

См. https://realm.io/docs/swift/latest#writes

Пример использования beginWrite()+commitWrite() https://realm.io/docs/swift/latest#interface-driven-writes

При транзакциях записи может произойти множество сбоев.Таким образом, просто небезопасно как-то не обрабатывать это.

Также группировка транзакций записи по «действию» не очень хорошая идея, если вы собираетесь обрабатывать большое количество объектов, потому что транзакции записи дорогостоящий .Вы бы предпочли сгруппировать эти изменения в одну транзакцию вместо множества мелких транзакций.

...