所以我试图在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
}
}
}
我需要做些什么来表示回滚?
答案 0 :(得分:5)
在闭包中,rollback
是指向布尔变量的指针
您可以使用以下内容将其设置为true
if !success {
rollback.memory = true
return
}
在 Swift 3 中,它将是
rollback.pointee = true
答案 1 :(得分:2)
rollback.initialize(true)
语法是正确的。不过,我注意到您的代码示例有一个印刷错误,引用initalize
,而不是initialize
(虽然奇怪的是,您的错误消息并非如此)。当我解决这个错字时,你的代码对我来说很好。