我认为简单的方法可以是这样的
var itemsArray: [Any] = [] {
didSet {
guard oldValue != itemsArray else { return }
let image = itemsArray.isEmpty ? #imageLiteral(resourceName: "emptyCart") : #imageLiteral(resourceName: "cart")
orderItemsButton.setImage(image, for: .normal)
}
}
每次你设置 itemsArray didSet 都会被调用并在需要时更改 orderItemsButton 的图像。
编辑:
根据您在评论中所说的,您可以使用委托
protocol CartDelegate: class {
func setCartImage(isEmpty: Bool)
}
class ViewController: UIViewController, CartDelegate {
var orderItemsButton: UIButton!
var someRandomClass: SomeRandomClass!
func setCartImage(isEmpty: Bool) {
if isEmpty {
// set image to empty cart
orderItemsButton.setImage(nil, for: .normal)
} else {
// set image to full cart
orderItemsButton.setImage(nil, for: .normal)
}
}
override func viewDidLoad() {
super.viewDidLoad()
// initate and set delegate to self
someRandomClass = SomeRandomClass()
someRandomClass.delegate = self
}
}
class SomeRandomClass {
weak var delegate: CartDelegate?
var itemsArray: [Any] = [] {
didSet {
delegate?.setCartImage(isEmpty: itemsArray.isEmpty)
}
}
}