Почему использование Realm пытается! в Свифте?

sprintf(mystring, "%05d", myInt);

Здесь «05» говорит «используйте 5 цифр с ведущими нулями».

24
задан Honey 16 November 2018 в 22:18
поделиться

3 ответа

Если вы ссылаетесь на примеры из царства Swift Docs , я подозреваю, что try! широко используется для краткости. Пользователю дается быстрый и грязный обзор основных понятий без слишком больших умственных затрат.

Вы, вероятно, будете сталкиваться с ошибками в какой-то момент вашего путешествия с использованием Царства. Позже вы заметите в документах, в разделе Области> Обработка ошибок , приведен пример do-catch.

do {
  let realm = try Realm()
} catch let error as NSError {
  // handle error
}

Для меня это означает, что примеры кода из документации не обязательно производственного качества, и пользователю рекомендуется использовать соответствующие функции обработки ошибок Swift.

24
ответ дан caseynolan 16 November 2018 в 22:18
поделиться

Я справляюсь с этой проблемой, создавая класс DatabaseManager, который обрабатывает маловероятное событие, когда царство выдает ошибку:

public class DatabaseManager {

    static var realm: Realm {
        get {
            do {
                let realm = try Realm()
                return realm
            }
            catch {
                NSLog("Could not access database: ", error)
            }
            return self.realm
        }
    }

    public static func write(realm: Realm, writeClosure: () -> ()) {
        do {
            try realm.write {
                writeClosure()
            }
        } catch {
            NSLog("Could not write to database: ", error)
        }
    }
}

Благодаря этому решению код выглядит намного чище, когда я хочу читать из области или писать в db:)

DatabaseManager.write(realm: realm) {
    let queryResult = self.realm.objects(Cookies.self).filter("cookieId == %@", cookieId)
    let cookie = queryResult.first
    cookie?.expirationDate = expirationDate as NSDate?
}
7
ответ дан da-na 16 November 2018 в 22:18
поделиться

Из документации Realm:

Вы, возможно, уже заметили, что мы инициализировали доступ к нашей переменной области, вызвав Realm (). Этот метод возвращает объект Realm, который отображается в файл с именем default.realm в папке «Документы» (iOS) или в папке «Поддержка приложений» (OS X) вашего приложения.

Каждый раз, когда вы взаимодействуете с файловой системой, вы рискуете столкнуться с ошибками, такими как проблемы с правами доступа или недостаточно места на диске. Успех не уверен.

Таким образом, если по какой-либо причине Realm не может создать или записать файл области, приведенные вами методы действительно вызовут исключение.

1
ответ дан BergQuester 16 November 2018 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: