【问题标题】:Can't pass variable value from firebase firestore to another class SWIFT无法将变量值从 firebase firestore 传递到另一个类 SWIFT
【发布时间】:2020-09-29 01:42:30
【问题描述】:

所以我在Functions 类中有这个功能:

struct Prices {
      var standardPrice: Int!

}

// FUNC PRICING

class Functions {
    private var PricingRef: CollectionReference!
    var price = Prices()

func getPrice() -> Prices {

        PricingRef = Firestore.firestore().collection("ProductXYZ")

        PricingRef.getDocuments { (snapshot, error) in
            if let err = error {
                debugPrint("Error fetching data \(err)")
            }
            else {
                guard let snap = snapshot else { return }
                for document in snap.documents {
                    let data = document.data()
                    let std = data["standard"] as! String
                    self.price.standardPrice = Int(std)!
                    print(self.price.standardPrice!) // This print the intended result

                }

            }
        }
        return price
    }
}

那我想把standardPrice的值传给这个类,叫PriceList:

class PriceList: UITableViewController {
     var price = Prices()
     var newStandardPrice = 0

func Price() {
        price = Functions().getPrice()
        newStandardPrice = price.standardPrice // always error with value nil
}

我总是遇到newStandardPrice 为零的错误。 但是print(self.price.standardPrice!) 显示了我想要的结果数量。 据我所知,这里的问题是因为firebase firestore从数据库中获取数据需要时间。 从 firebase 数据库分配新价格后,如何获取 standardPrice 的值?

任何帮助将不胜感激

谢谢

【问题讨论】:

    标签: ios swift firebase google-cloud-firestore swift5


    【解决方案1】:

    你需要使用完成处理程序,因为它的异步功能

    func getPrice(completion:@escaping (Prices?,Error?)-> Void)  {
    
            PricingRef = Firestore.firestore().collection("ProductXYZ")
    
            PricingRef.getDocuments { (snapshot, error) in
                if let err = error {
                    debugPrint("Error fetching data \(err)")
                     completion(nil,err)
                }
                else {
                    guard let snap = snapshot else { return }
                    for document in snap.documents {
                        let data = document.data()
                        let std = data["standard"] as! String
                        self.price.standardPrice = Int(std)!
                        print(self.price.standardPrice!) // This print the intended result
                        completion(self.price.standardPrice,nil)
    
                    }
    
                }
            }
    
        }
    

    如何使用

    Functions().getPrice { (price, error) in
    
            if let err = error {
                // do something if you get error
            } else if let getPrice = price {
                // use price
               self.price = getPriice
            }
    

    【讨论】:

    • 嘿,谢谢你的回答,但是 completion(self.price.standardPrice,nil) 显示错误 Cannot convert value of type 'Int' to expected argument type 'Prices?' 我还需要 func getPrice() 末尾的 ` -> 价格 ` 吗?
    • 给它 self.price ... 而不是 self.price.standardPrice
    • 大家好!它有效,兄弟,你是这里真正的 MVP。非常感谢男人
    猜你喜欢
    • 1970-01-01
    • 2013-02-08
    • 2016-03-01
    • 1970-01-01
    • 2016-11-29
    相关资源
    最近更新 更多