我正试图根据items变量的变化更新视图,但在didSet中cartView为nil

@IBOutlet weak var cartView: UIView!

var items = 0 {
    didSet{
        if items > 0 {
            cartView.isHidden = false
        } else {
            cartView.isHidden = true
        }
    }
    willSet{}
}

从tableviewcell更新此变量,如下所示--
'''
类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出口连接在您的XIB /故事板中。

@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
}

关于ios - View 内部属性观察器抛出“意外发现nil,同时隐式展开一个可选值:文件”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58751392/

10-13 06:35