使用 FMDB 回滚 Swift 中的事务
Using FMDB to Rollback Transactions in Swift
所以我想在 Swift 中使用 FMDB。就桥接头等而言,我已经把所有东西都连接好了,但我终究无法弄清楚如何在 FMDatabaseQueue
class 中使用事务。具体来说,我不明白回滚事务的语法。我尝试了下面的代码,但它产生了
的编译时错误
'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
}
}
}
我需要做什么来指示回滚?
在闭包中,rollback
是一个指向布尔变量的指针
您可以将其设置为 true
:
if !success {
rollback.memory = true
return
}
在Swift 3中会是
rollback.pointee = true
rollback.initialize(true)
语法正确。不过,我注意到您的代码示例有一个印刷错误,引用了 initalize
,而不是 initialize
(尽管奇怪的是,您的错误消息没有)。当我更正该拼写错误时,您的代码对我来说工作正常。
所以我想在 Swift 中使用 FMDB。就桥接头等而言,我已经把所有东西都连接好了,但我终究无法弄清楚如何在 FMDatabaseQueue
class 中使用事务。具体来说,我不明白回滚事务的语法。我尝试了下面的代码,但它产生了
'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
}
}
}
我需要做什么来指示回滚?
在闭包中,rollback
是一个指向布尔变量的指针
您可以将其设置为 true
:
if !success {
rollback.memory = true
return
}
在Swift 3中会是
rollback.pointee = true
rollback.initialize(true)
语法正确。不过,我注意到您的代码示例有一个印刷错误,引用了 initalize
,而不是 initialize
(尽管奇怪的是,您的错误消息没有)。当我更正该拼写错误时,您的代码对我来说工作正常。