繁体   English   中英

无法将变量值从 firebase 防火墙传递到另一个 class SWIFT

[英]Can't pass variable value from firebase firestore to another class SWIFT

所以我在 class Functions中有这个 function :

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值传递给这个 class,称为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 火库从数据库中获取数据需要时间。 从 firebase 数据库中分配新价格后,如何获取standardPrice的值?

任何帮助将不胜感激

谢谢

您需要使用完成处理程序,因为它的异步 function

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
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM