ios - 查看内部属性观察器抛出“在隐式展开可选值时意外发现 nil:文件”
问题描述
我正在尝试根据 items 变量的更改来更新视图,但在 didSet 中 cartView 为零
@IBOutlet weak var cartView: UIView!
var items = 0 {
didSet{
if items > 0 {
cartView.isHidden = false
} else {
cartView.isHidden = true
}
}
willSet{}
}
像这样从 tableviewcell 更新这个 var -- ''' class ItemListingItemsTableViewCell: UITableViewCell {
@IBOutlet weak var itemTypeImage: UIImageView!
@IBOutlet weak var itemName: UILabel!
@IBOutlet weak var itemPrice: UILabel!
@IBOutlet weak var itemAdd: UIButton!
@IBOutlet weak var itemMinus: UIButton!
@IBOutlet weak var itemPlus: UIButton!
@IBOutlet weak var buttonsview: UIView!
**var itemVC = ItemListingViewController()**
@IBAction func addItemInitial(_ sender: Any) {
itemAdd.isEnabled = false
itemAdd.setTitle("1", for: .normal)
itemAdd.setTitleColor(UIColor.white, for: .normal)
itemMinus.isHidden = false
itemPlus.isHidden = false
itemVC.items = itemVC.items + 1
}'''
解决方案
那是因为您在设置count
插座之前进行了修改cartView
。我已经通过检查是否 + 向 cartView 本身添加了观察者来修改您的代码cartView
,nil
因此一旦分配了插座,您会cartView
立即根据count
属性值更新其状态。
还请确保cartView
在您的 xib/storyboard 中连接了插座。
@IBOutlet private weak var cartView: UIView! {
didSet {
updateCartViewVisibility()
}
}
var items = 0 {
didSet{
updateCartViewVisibility()
}
}
private func updateCartViewVisibility() {
guard cartView != nil else { return }
cartView.isHidden = items == .zero
}
推荐阅读
- sql - 有没有办法从多个表中选择此名称?
- sql - 从字符串转换日期和/或时间并从日期中提取季度/年时转换失败
- java - 错误 - Assert 类型中的方法 assertEquals(Object, object) 不适用于参数 (String, Void)
- excel - 在数据透视表中重复标签但添加唯一标识符
- android - 如何确定是否已经设置了 FLAG_KEEP_SCREEN_ON?
- c++ - 有没有办法保存用户输入的文本?
- flutter - Flutter bloc监听器中的延迟状态检查
- excel - 我可以使用 CSV 文件作为 Excel 数据透视数据源吗?
- flutter - 如何使 Flutter 应用程序字体大小独立于设备设置?
- c++ - C++ C4244 =':从 'std::streamsize' 转换为 'unsigned short',可能会丢失数据;任何解决方案?