如何获取设置为局部变量的值

问题描述 投票:0回答:1

我一直在尝试从 firebase 获取数据并使用这样的完成处理程序将其存储在 dataModel 中


static var dataModels = [DataModel]()

static func fetchData(completion: @escaping () -> Void) {
    let ref = Database.database().reference().child("data")
    ref.observe(
        .value,
        with: { snapshot in
            guard let value = snapshot.value as? [[String: Any]] else {
                return
            }

            for data in value {
                guard let contentArray = data["content"] as? [[String: String]] else {
                    return
                }

                var content = [Content]()

                for item in contentArray {
                    guard let imageURL = item["imageURL"],
                        let title = item["title"],
                        let description = item["description"]
                    else {
                        continue
                    }

                    content.append(
                        Content(imageURL: imageURL, title: title, description: description))
                }

                guard let videoURL = data["videoURL"] as? String,
                    let videoTitle = data["videoTitle"] as? String,
                    let videoDescription = data["videoDescription"] as? String
                else {
                    continue
                }

                let dataModel = DataModel(
                    videoURL: videoURL, videoTitle: videoTitle, videoDescription: videoDescription,
                    content: content)

                DataFetch.dataModels.append(dataModel)
            }

            // Reload your table view after the data has been fetched and appended

            completion()
        })
}

并像这样访问它

DataFetch.fetchData {
    self.title.text = DataFetch.dataModels[0].videoTitle
}

但我想设置行数

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return 0

}

我尝试使用

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    var numberOfRows: Int?
    DataFetch.fetchData {
        number = DataFetch.dataModels[0].content[0].count
    }
    return numberOfRows!
    // Return Found Nil error
}

当我尝试调试时,它进入了 fetchData,但返回结果显示为 nil。

任何解决方案

swift firebase uitableview firebase-realtime-database
1个回答
1
投票

将代码重构为

var numberOfRows: Int? 
override func viewDidLoad() {  
   super.viewDidLoad()
   DataFetch.fetchData { [weak self] in
       self?.numberOfRows = DataFetch.dataModels.first?.content.first?.count
       self?.tableView.reloadData() 
   }
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
     return numberOfRows ?? 0
}
© www.soinside.com 2019 - 2024. All rights reserved.