我有一个扩展名:
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
函数中为UILabel
和UIImageView
调用animateHidden
?”。您可以通过限制扩展名来做到这一点。带有
where
子句的示例:extension Animations where Self: UIView {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
感谢@ Knight0fDragon对
where
子句的出色评论。