swift - didSet 未在 UIImageView 上调用

swift - didSet not called on UIImageView

如何让 didSet 识别何时设置了 imageView.image?好像只在初始化的时候调用。

@IBOutlet weak var imageView: UIImageView! {
   didSet {
      //do stuff
   }
}

didSet 只会在您设置 imageView 本身时调用。例如:

imageView = UIImageView()

这实际上没有意义,因为您已经有了一个图像视图并且它工作得很好。您要做的是监视图像视图属性之一的变化。

为此,请尝试制作 UIImageView 的子 class,然后观察其 image 的变化。不要忘记在情节提要中重新设置图像视图的自定义 class,然后重新连接插座。

class CustomImageView: UIImageView {
    override var image {
        didSet {
            /// do stuff
        }
    }
}

如果您需要在视图控制器中执行一些代码,请尝试使用闭包。

class CustomImageView: UIImageView {
    var imageSet: (() -> Void)?
    override var image {
        didSet {
            imageSet?()
        }
    }
}

class ViewController: UIViewController {
    @IBOutlet weak var imageView: CustomImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        imageView.imageSet = {
            /// do stuff
        }
    }
}

或者,您可以使用 KVO