我正在我的应用的tableviewcontroller
之一中实施静态vc
。我在此cartManager
中将vc
定义为:
var cartManager: ShoppingCartManager {
didSet {
self.tableView.reloadData()
}
}
configureCell
是我定义单元格配置的地方。
但是,我在以下函数中的guard let statement
上收到错误。
我似乎不知道为什么会出现这个错误。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cartManager = cartManager else {
return UITableViewCell()
}
if (indexPath.row < cartManager.distinctProductCount()) {
let cell = tableView.dequeueReusableCell(withIdentifier: myCartProduct, for: indexPath) as? CartTableViewCell
cell.configureCell(item: cartManager.distinctProductItems()[indexPath.row])
return cell!
}
else if (indexPath.row == cartManager.distinctProductCount()) {
let cell = tableView.dequeueReusableCell(withIdentifier: myCartTotal, for: indexPath) as? CartTotalTableViewCell
cell.configureCell(total: cartManager.totalPrice())
return cell!
}
let cell = tableView.dequeueReusableCell(withIdentifier: submitCart, for: indexPath) as? CartPlaceOrderTableViewCell
cell.configureCell(cartManager: cartManager)
cell?.delegate = self
return cell!
}
我的numberOfRowsInSection
方法也是如此。
numberOfRowsInSection
函数的代码在这里:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard let cartManager = cartManager else {
return 0
}
return cartManager.distinctProductCount() + 2
}
我是否正确使用guard let
语句,或者还有其他方法可以使用该语句?
答案 0 :(得分:1)
guard let x = x
表示第二个x
是一个可选项,我们正在尝试解包它以获取内部的任何内容。如果“可选”为nil
,则表示我们失败并且guard
失败并退出。如果Optional不是nil
,我们就会成功,第一个x
会成为Optional中包含的内容。
您无法使用cartManager
执行此操作,因为它不是可选项。
答案 1 :(得分:0)
好的,我在命中和试验的基础上找到了解决方案,因为我对cartManager
定义进行了条件绑定。这是解决方案。
var cartManager: ShoppingCartManager? {
didSet {
self.tableView.reloadData()
}
}