gpt4 book ai didi

ios - 用于配置具有多个 Firebase 调用的 View 的数据源

转载 作者:行者123 更新时间:2023-11-30 11:18:12 27 4
gpt4 key购买 nike

我有一个 View ,我正在其中使用数据源来配置 View 。 dataSource 从两个单独的 firebase 调用 getAgetBCD 获取数据。但是,由于 firebase 调用是异步的,我在 didSet 中为 BCD 设置了 View.DataSource,但无法弄清楚如何使用 BCD 中的信息为 A 设置数据源。更好的方法是创建两个具有单独 init 的单独数据源,以便 View 配置不依赖于哪个 Firebase 调用先返回?或者使用group.notify

ViewController 的相关代码行:

class ViewController: UIViewController {

private var BCDDictionary = [String:Int]() {
didSet {
let B = BCDDictionary["B"]
let C = BCDDictionary["C"]
let D = BCDDictionary["D"]
self.AView.dataSource = AView.DataSource(A:10, B:B, C:C, D:D)
// A is hardcoded currently
}
}

private var A: Int

override init() {

super.init()

_ = FirebaseAPI.shared.getA { [weak self] result in
DispatchQueue.main.async {
switch result {
case .success(let A):
self?.A = A
case .failure(let error):
print(error)
}
}
}
_ = FirebaseAPI.shared.getBCD(completion: {[weak self] result in
DispatchQueue.main.async {
switch result {
case .success(let BCD):
self?.BCDDictionary = (self?.countBCD(BCD: BCD))!
// Turns BCD into the proper dictionary
case .failure(let err):
print(err)
}
}
})
}

View的相关代码行:

final class AView: UIView {

struct DataSource {
let numberOfA: Int
let numberOfB: Int
let numberOfC: Int
let numberOfD: Int
}

var dataSource: DataSource? {
didSet {
self.numberOfALabel.text = String(self.dataSource!.numberOfA)
self.numberOfBLabel.text = String(self.dataSource!.numberOfB)
self.numberOfCLabel.text = String(self.dataSource!.numberOfC)
self.numberOfDLabel.text = String(self.dataSource!.numberOfD)
}
}
}

extension AView.DataSource {

init(A: Int, B: Int, C: Int, D: Int) {
self.numberOfA = A
self.numberOfB = B
self.numberOfC = C
self.numberOfD = D
}
}

最佳答案

由于有2个异步任务,并且数据源应该由它们同时发起,那么最好的选择是

let group = DispatchGroup()

关于ios - 用于配置具有多个 Firebase 调用的 View 的数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51566292/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com