使用FMDB在Swift中回滚事务

时间:2015-02-12 19:12:03

标签: ios sqlite swift transactions fmdb

所以我试图在Swift中使用FMDB。就桥接标题而言,我已经把所有东西都搞好了,但我不能为我的生活弄清楚如何在FMDatabaseQueue类中使用事务。具体来说,我不理解回滚事务的语法。我已经尝试了下面的代码,但它产生的编译时错误为

'UnsafeMutablePointer<ObjCBool>' does not have a member named 'initialize'

我确信这与指针被传递到闭包中以进行回滚这一事实有关,但据我所知,你无法重新分配传递给swift中的闭包的变量,所以我不知道我是怎么做的我想设置指针以指示需要回滚。

if let queue = FMDatabaseQueue(path: DB_PATH) {
    queue.inTransaction() {
        db, rollback in

        // This could be any statement, drop table is just an example
        success = db.executeUpdate("DROP TABLE test", withArgumentsInArray:nil)

        if !success {
            // Need to rollback here
            rollback.initialize(true)
            return
        }
    }
}

我需要做些什么来表示回滚?

2 个答案:

答案 0 :(得分:5)

在闭包中,rollback是指向布尔变量的指针 您可以使用以下内容将其设置为true

if !success {
    rollback.memory = true
    return
}

Swift 3 中,它将是

    rollback.pointee = true

答案 1 :(得分:2)

rollback.initialize(true)语法是正确的。不过,我注意到您的代码示例有一个印刷错误,引用initalize,而不是initialize(虽然奇怪的是,您的错误消息并非如此)。当我解决这个错字时,你的代码对我来说很好。