首页 > 解决方案 > 查看内部属性观察器抛出“在隐式展开可选值时意外发现 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


}'''

标签: iosswift

解决方案


那是因为您在设置count插座之前进行了修改cartView。我已经通过检查是否 + 向 cartView 本身添加了观察者来修改您的代码cartViewnil因此一旦分配了插座,您会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
}

推荐阅读