Swift 当静态变量更改时更改UILabel

Swift 当静态变量更改时更改UILabel,swift,static,tableview,uilabel,stepper,Swift,Static,Tableview,Uilabel,Stepper,我有一个CartItem结构,我在其中存储我在UITableView中显示的项目,我的UITableView位于CartViewController中。我将自定义单元格用于我的表视图。这是我的自定义单元格: class CartItemCell: UITableViewCell { @IBOutlet weak var productImage: UIImageView! @IBOutlet weak var productName: UILabel! @IBOutlet weak var p

我有一个
CartItem
结构,我在其中存储我在
UITableView
中显示的项目,我的
UITableView
位于
CartViewController
中。我将
自定义单元格
用于我的
表视图
。这是我的
自定义单元格

class CartItemCell: UITableViewCell {

@IBOutlet weak var productImage: UIImageView!
@IBOutlet weak var productName: UILabel!
@IBOutlet weak var productPrice: UILabel!
@IBOutlet weak var productTotalPrice: UILabel!
@IBOutlet weak var stepper: UIStepper!



override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

var cellIndex: Int?

var product: CartItem?{
    didSet{
    
    // change the cell in table view when first 
    // initialized and when stepper value is changed 
    .
    .
    .
}

@IBAction func stepperValueChanged(_ sender: UIStepper) {
    CartItem.cartItems[self.cellIndex!].number = Int(sender.value)
    self.product?.number = CartItem.cartItems[self.cellIndex!].number
    }
}

CartViewController
中,我有
totalPrice UILabel
,它从
CartItem.totalPrice
静态变量获取其值
CartItem。每次单击my
UITableViewCell
中的
UIStepper
时,都会计算并更改totalPrice
的值。以下是
CartViewController

class CartViewController: UIViewController{

@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var cartLabel: UILabel!
@IBOutlet weak var totalPrice: UILabel!

var items = CartItem.cartItems

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.dataSource = self
    tableView.delegate = self
    tableView.register(UINib(nibName: "CartItemCell", bundle: nil), forCellReuseIdentifier: "ReusableCell")
    self.totalPrice.text = String(Int(CartItem.totalPrice))
    tableView.reloadData()
}
}


extension CartViewController: UITableViewDataSource{

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ReusableCell", for: indexPath) as! CartItemCell
    
    cell.product = items[indexPath.item]
    cell.cellIndex = indexPath.item
    return cell
}

}



我希望
CartViewController
中的
totalPrice
标签在每次
CartItem.totalPrice
更改时都会更改。我在我的
CartItemCell



谢谢使用委托或闭包将值从tableviewcell更新到viewController

Protocol CartItemProtocol: AnyObject{
    func valueUpdated() 
}

class CartItemCell: UITableViewCell {

@IBOutlet weak var productImage: UIImageView!
@IBOutlet weak var productName: UILabel!
@IBOutlet weak var productPrice: UILabel!
@IBOutlet weak var productTotalPrice: UILabel!
@IBOutlet weak var stepper: UIStepper!
weak var delegate: CartItemProtocol?


override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}

var cellIndex: Int?

var product: CartItem?{
    didSet{

    // change the cell in table view when first 
    // initialized and when stepper value is changed 
    .
    .
    .
}

@IBAction func stepperValueChanged(_ sender: UIStepper) {
    CartItem.cartItems[self.cellIndex!].number = Int(sender.value)
    self.product?.number = CartItem.cartItems[self.cellIndex!].number
   self.delegate.valueUpdated()
    }
}
并在cellforRow中设置委托

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> 
UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ReusableCell", for: indexPath) as! CartItemCell

    cell.product = items[indexPath.item]
    cell.cellIndex = indexPath.item
    cell.delegate = self
    return cell
}
并在代表确认中更新标签

extension CartViewController:CartItemProtocl{
    self.totalPrice.text = String(Int(CartItem.totalPrice))
}