为 Swift 2.0 实例化 Realm 数据库 - 最佳实践?

Instantiating Realm database for Swift 2.0 - best practice?

我想知道实例化 Realm 数据库的最佳实践是什么 Swift 2。 Swift 1.2 领域和 Swift 2 领域之间的主要区别之一是领域 class 添加了对错误处理的支持。 因此,Realm 网站上的这段代码不再有效:

让 realm = Realm()

我可以想出几种在 Swift 2 世界中实例化领域 class 的方法:

(1)让境界=试试!境界()

这个选项对我来说似乎有点 "unsafe",因为如果 class 无法实例化,它可能会导致运行时错误。

(2) 将整个 Realm 操作(包括 class 实例化)放在 Do-Catch 块中

do {
    let realm = try Realm()

    realm.write{realm.add(myObject)}
    }
    catch
    {
        print("Some Realm error")
    }

这绝对有效,绝对安全。但是,我真的不喜欢必须实例化 每次我需要对数据库执行操作时,Realm class。如果我尝试创建 一个 IVAR 'realm' 并将其放在 Do-Catch 块之外,变量超出范围。 例如,以下代码将无法编译...

    //IVAR declared outside of Do-Catch...
    let realm:Realm

    do{
        //Get instance of Realm
        realm = try Realm()

        //This write operation works
        realm.write{realm.add(myObject_1)}
    }
    catch
    {
        print("Some Realm error")
    }


    //Create another Dog object
    let myObject_2 = SomeObject()

    //This next line produces an error:  "Variable 'realm' used before being initialized".
    //Initialized 'realm' inside Do-Catch is now out of scope.
    realm.write({
        realm.add(myObject_2)
    })

对于在 Swift 2 的新错误处理环境中使用 Realms 的最佳实践应该是什么样子的任何反馈(尤其是来自 Realm 的人),我将不胜感激。提前致谢。

除非您真的要处理收到的错误,否则我强烈建议使用try!

您的第二个代码片段不起作用,因为如果初始化领域失败,则永远不会分配给 realm 变量,这是无效的。您可以通过将 realm 变量设为 Realm?.

类型来解决这个问题

请记住,Realm() 和 write 都可以抛出。这意味着除非您使用 try!,否则它们都需要 try catch。 像这样:

    do {
        let realm = try Realm()

        do {
            try realm.write {
                realm.add(myObject_1)
            }
        } catch let error {
            print(error)
        }

    } catch let error{

        print(error)
    }