我有一个扩展名:

extension UILabel {
    func animateHidden(flag: Bool) {
        self.hidden = flag
    }
}

我需要为UIImageView创建相同的代码,但是我不想复制整个代码。是否可以扩展多个类?

谢谢。

最佳答案

您可以制定一个协议(protocol)并对其进行扩展。

就像是:

protocol Animations {
    func animateHidden(flag: Bool)
}

extension Animations {
    func animateHidden(flag: Bool) {
        // some code
    }
}

extension UILabel: Animations {}

extension UIImageView: Animations {}

您的方法将可用于扩展类:
let l = UILabel()
l.animateHidden(false)

let i = UIImageView()
i.animateHidden(false)

在评论中,您询问:“在这种情况下,如何在self函数中为UILabelUIImageView调用animateHidden?”。您可以通过限制扩展名来做到这一点。

带有where子句的示例:
extension Animations where Self: UIView {
    func animateHidden(flag: Bool) {
        self.hidden = flag
    }
}

感谢@ Knight0fDragon对where子句的出色评论。

10-08 11:39