我正在从FireStore读取数据并将其存储在我的数组中。我得到的数据是在闭包中,所以我不得不使用完成处理程序将其传递到函数之外。但是当我调用完成处理函数时,我无法得到数组的值。它的所有打印都是[Project.CellComponents]。我知道一定有一些愚蠢的错误,我很抱歉,因为我只是一个初学者。
OwnerHomeViewController。
class OwnerHomeViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var listingDetailArray:[CellComponents] = []
var docRef:DocumentReference!
var typeOfListing:String = ""
var charges:Int = 0
var rating:Float = 0.0
var nameOfListing:String = ""
var cityName:String = ""
var details:String = ""
var currency:String = ""
var days:String = ""
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.separatorStyle = UITableViewCell.SeparatorStyle.none
getDataFromDB { (array) in
print(array) ////Result in console '[Project.CellComponents]'
listingDetailArray = array
}
}
func getDataFromDB(completionHandler: @escaping(_ array: [CellComponents]) -> ()) {
var tempArray:[CellComponents] = []
docRef = Firestore.firestore().document("/Property/ktgEh96NXXTShCOBwj8QpEM79PB3/Hotel/2")
docRef.getDocument { (docSnapshot, error) in
if error != nil {
return
}
else {
guard let docSnapshot = docSnapshot, docSnapshot.exists else { print("Error found");return }
let myData = docSnapshot.data()
print(myData?["Type"] as? String ?? "")
self.typeOfListing = myData?["Type"] as? String ?? "Not Found"
self.charges = Int(myData?["Charges"] as? String ?? "Not Found") ?? 0
self.nameOfListing = myData?["Title"] as? String ?? "Not Found"
self.currency = myData?["Currency"] as? String ?? "Not Found"
self.days = myData?["Days"] as? String ?? "Not Found"
self.details = myData?["Description"] as? String ?? "Not Found"
let data2 = CellComponents(image: UIImage(named: "b")!, typeOfListing: self.typeOfListing , charges: self.charges, rating: 4.1, nameOfListing: self.nameOfListing , cityName: "Rawalpindi", detail: self.details, currency: self.currency, days: self.days)
tempArray.append(data2)
completionHandler(_:tempArray)
}
}
}
}
extension OwnerHomeViewController:UITableViewDataSource,UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return listingDetailArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let listingData = listingDetailArray[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "OwnerHomeCell") as! OwnerHomeTableViewCell
cell.setListingData(array: listingData)
cell.details.isEditable = false
return cell
}
}
而我的CellComponent类
import Foundation
import UIKit
class CellComponents {
var image: UIImage
var typeOfListing:String
var charges:Int
var rating:Float
var nameOfListing: String
var cityName : String
var detail : String
var currency:String
var days:String
init (image:UIImage, typeOfListing:String, charges:Int, rating:Float, nameOfListing:String, cityName:String, detail:String, currency: String, days:String)
{
self.image = image
self.typeOfListing = typeOfListing
self.charges = charges
self.rating = rating
self.nameOfListing = nameOfListing
self.cityName = cityName
self.detail = detail
self.currency = currency
self.days = days
}
}
你的代码里有一些提前返回。你可以标记和调试一下。