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

时间:2015-08-26 05:06:27

标签: swift2 realm

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

让realm = Realm()

我可以想到在Swift 2世界中实例化一个Realm类的几种方法:

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

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

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

do {
    let realm = try Realm()

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

这绝对有效,绝对安全。但是,我真的不喜欢实例化 每次我需要对数据库执行操作时,Realm类。如果我试着创造 IVAR'领域'并将其置于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)
    })

我很感激任何反馈(特别是来自Realm的人)关于在Swift 2的新错误处理环境中使用Realms的最佳实践应该是什么样的。提前谢谢。

1 个答案:

答案 0 :(得分:1)

请记住,Realm()和write都可以抛出。这意味着他们都需要尝试捕获,除非你使用尝试! 像这样:

    do {
        let realm = try Realm()

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

    } catch let error{

        print(error)
    }