我有成分的价格表,存储在Cloud Firestore中。我想计算特定原料的价格,将其传递给另一个VC并应用到标签上,所以我写了这段代码。
extension RecepiesViewController: UICollectionViewDelegate {
//Passing data to next VC
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destinationVC = segue.destination as! ResultViewController
destinationVC.result = totalPrice
}
//Recepie cell pressed
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("You selected cell #\(indexPath.item)!")
// Calculating price for recepie
func recepieCalculation(_ completion: @escaping (Double) ->()) {
for ingridients in cakeRecepies![indexPath.item].ingridientList {
db.collection("Okey")
.document(ingridients.name)
.getDocument() { (document, error) in
if let document = document, document.exists {
let data = document.data()
if let price = data!["price"] as? Double, let count = data!["count"] as? Int {
let priceForOne = price / Double(count)
self.totalPrice = self.totalPrice + priceForOne * Double(ingridients.count)
}
} else {
print("Document does not exist")
}
completion(self.totalPrice)
}
}
}
recepieCalculation {totalPrice in
self.performSegue(withIdentifier: "goToResult", sender: self)
}
}
}
另一个VC代码
import Foundation
import UIKit
import RealmSwift
class ResultViewController: UIViewController {
@IBOutlet weak var resultLabel: UILabel!
var result: Double = 0.0 {
didSet {
print(result)
resultLabel.text = String(format: ".%f", result)
}
}
@IBOutlet weak var recepieImage: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
}
}
然后在这一行 resultLabel.text = String(format: ".%f", result)
出错
线程1:致命错误。当隐式拆包一个Optional值时,意外发现nil。
会有什么问题?
这是一个常见的错误。
此刻要呈现的segue的目的控制器的网点还没有连接,所以将该值分配给标签中的 didSet
观察者崩溃。
解决办法。
删除观察者
var result = 0.0
并将该值赋于 viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
print(result)
resultLabel.text = String(format: ".%f", result)
}