Swift + Realm:如何从集合内部更改外部变量。



在本教程之后,我编写了以下类:

import RealmSwift
import Darwin
import SwiftUI
let app = App(id: "my-app-id")
class AccessManager: Object {
@objc dynamic var isInTime: Bool = false

func foo2() -> Bool {
return true
}
func foo1() {
app.login(credentials: Credentials.anonymous) { (result) in
DispatchQueue.main.async {
switch result {
case .failure(let error):
print("Login failed: (error)")
case .success(let user):
print("Login as (user) succeeded!")

let client = app.currentUser!.mongoClient("mongodb-atlas")
let database = client.database(named: "my-database")
let collection = database.collection(withName: "my-collection")
let identity = "my-identity"

collection.find(filter: ["_partition": AnyBSON(identity)], { (result) in
switch result {
case .failure(let error):
print("Call to MongoDB failed: (error.localizedDescription)")
case .success(let documents):
self.bar = self.foo2()
print(self.bar) // prints true
}
})
print(self.bar) // prints false
}
}
}
}
}

当我在collection.find范围内(使用self.foo2函数)改变self.bar的值时,它的值在该范围外不会改变-即在第一个print(self.bar)-true中打印,但在第二个false中打印。

如何更改self.bar的值,使更改也将在collection.find的范围之外生效?

正如@Jay评论的:

闭包是异步的,闭包后面的代码也是异步的(可以)在闭包中的代码之前执行。这段代码会打印出来在值设置为true之前为False。代码比数据只在闭包中有效。

这就是为什么在我的例子中,闭包外的print(self.bar)collection.find闭包之前执行。因此,它的结果是false而不是true

相关内容

  • 没有找到相关文章

最新更新