Swift2 为Swift 2.0实例化领域数据库-最佳实践?

Swift2 为Swift 2.0实例化领域数据库-最佳实践?,swift2,realm,Swift2,Realm,我想知道Swift 2实例化领域数据库的最佳实践是什么。 Swift 1.2的领域与Swift 2的主要区别之一是领域类增加了对错误处理的支持。 因此,Realm网站上的此代码不再有效: 让realm=realm() 我可以想出几种方法来实例化Swift 2世界中的领域类: (1) 让我试试!领域() 这个选项对我来说似乎有点“不安全”,因为如果类未能实例化,它可能会导致运行时错误 (2) 将整个领域操作(包括类实例化)放在Do Catch块中 do { let realm = try

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

让realm=realm()

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

(1) 让我试试!领域()

这个选项对我来说似乎有点“不安全”,因为如果类未能实例化,它可能会导致运行时错误

(2) 将整个领域操作(包括类实例化)放在Do Catch块中

do {
    let realm = try Realm()

    realm.write{realm.add(myObject)}
    }
    catch
    {
        print("Some Realm error")
    }
这绝对有效,绝对安全。然而,我真的不喜欢实例化 每当我需要在数据库上执行操作时,Realm类都会出现。如果我尝试创建 一个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的新错误处理环境中使用领域的最佳实践应该是什么样的。提前感谢。

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


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

类型来解决这个问题。请记住,realm()和write都可以抛出。这意味着它们都需要try-catch,除非您使用try!。 像这样:

    do {
        let realm = try Realm()

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

    } catch let error{

        print(error)
    }

尝试但我同意@luckman777,它确实感觉不安全,而且可能会使应用程序崩溃。如果它确实崩溃了,可能是因为文件丢失或某些迁移错误,这可能应该在一个更全局的范围内处理,可能是在appLaunch上。。。尝试另一方面,可以返回可选值并抑制错误处理场景。我不确定我自己哪一个更好,目前我改变了大多数情况尝试。。。希望一切顺利?