我目前正在尝试从我的数据库中提取一系列项,并将它们追加到存储在变量中的数组中。
这可以成功地工作--并且一旦viewDidLoad执行。
然后,我想调用一个函数来迭代这个数组,对于其中的每个元素,取出一个平衡值,并将其添加到全局变量中。
我可以通过在我的初始数据库调用中调用函数,并将其包装在DispatchQueue中来实现这一点--这是重复的,实际上是值的两倍,几乎就像add函数被调用两次一样。
但我不知道这是在哪里发生的,也不知道为什么。我的理解是,这个数据库调用只发生一次,但似乎函数被调用了两次。
特别是,我的问题是这样发生的:
totalBalance应该等于5,但它得到2+3两次,所以最终是10。
这是我的代码:
class DashboardViewController: UIViewController {
let db = Firestore.firestore()
var accounts: [Account] = []
var totalBalance: Int = 0
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var balanceLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
fetchAccounts()
}
func fetchAccounts() {
db.collection("accounts")
.getDocuments { (QuerySnapshot, error) in
if let err = error {
print("Error getting documents: \(err)")
} else {
if let snapshotDocuments = QuerySnapshot?.documents {
for doc in snapshotDocuments {
let data = doc.data()
if let balance = data["accountBalance"] as? String {
let newAccount = Account(
accountBalance: balance,
)
self.accounts.append(newAccount)
}
DispatchQueue.main.async {
self.calculateBalance()
self.tableView.reloadData()
}
}
}
}
}
}
func calculateBalance() {
for cash in accounts {
totalBalance += Int(cash.accountBalance)!
}
DispatchQueue.main.async {
self.balanceLabel.text = "Overall balance - -£\(self.totalBalance)"
}
}
}
这里的任何反馈都将非常感谢--我一直在挠头,但认为有人从外面进来将能够发现我的问题所在。
如果我没有读错,您将在循环中调用CalculateBalance
方法,如果SnapshotDocuments
中有5个帐户,则该方法将被调用5次:
for doc in snapshotDocuments {
let data = doc.data()
if let balance = data["accountBalance"] as? String {
let newAccount = Account(
accountBalance: balance,
)
self.accounts.append(newAccount)
}
//This will get called multiple times
//DispatchQueue.main.async {
// self.calculateBalance()
// self.tableView.reloadData()
//}
}
//This will get called only once
DispatchQueue.main.async {
self.calculateBalance()
self.tableView.reloadData()
}
复杂的画图函数利用2-D线性转换能让你画出任意图形。这个功能与Adobe? PostScript 语言实现的功能很相似,在X和Win32上,在画线段之前所有的转换顶点都是用整数表示,这就限制了画图的精确性。如果要画比较精确的图形,最好用OpenGL来画。 void fl_push_matrix() void fl_pop_matrix() 保存和恢复当前的转换,堆栈的最大深度为4 void fl
为什么在添加捕获元素时,下面的lambda不符合签名? 但这会吗? 签名:
LCUI 实现了一些图形 API 用于解决组件的背景、边框和阴影的绘制问题。它们都依赖绘制上下文且都支持局部区域绘制,使得 LCUI 能够利用脏矩形机制和 OpenMP 并行渲染来提升渲染性能。 绘制背景 背景绘制参数被定义为LCUI_Background 结构体类型的对象,由 Background_Paint() 函数负责绘制。在下面的例子中,我们将画布中的区域 (200, 100, 400,
问题内容: 在Swift 2中是否有任何 内置 方法来创建有序地图?数组按对象附加到其的顺序排序,但字典不排序。 例如 是否有任何内置方法来创建有序映射,该有序映射的排序方式与数组相同,还是我必须创建自己的类? 我想尽可能避免创建自己的类,因为Swift所包含的任何内容都将更有效率。 问题答案: 您可以通过输入具有类型的键来对其进行排序。 要么 我推荐第一种,因为它是一种更常见的格式(例如JSON
各位程序员好, 我在代码中遇到了一个似乎无法破解的小问题。它与Java的Jframe;图形区域有关。我将在下面发布的代码是在一个绘图方法上。其目的是绘制ArrayList中的房间,该房间位于另一个类中,因此之前。这种偏离航线的情况不会发生,因此在这里发帖。 获取有关该项目的背景信息是ArrayList,其中包含各种不同大小和颜色的房间。房间本身就是物体。 首先是课程: 下面是用于创建房间的类。 我
问题内容: 我正在尝试将地图()的内容复制到另一个地图()内,然后清除, 以便它可以在下一次迭代/循环中获取新值。问题在于,如果不清除超级地图中的参考,就无法清除地图。这是一些伪代码。 我也尝试了一些动态的东西,但显然会引发错误(无法指定为nil) 问题是如何创建关联地图?在PHP中,我只使用aSuperMap [y] [x] = aData。似乎golang没有任何明显的方法。如果我从超级地图中