I have an extension:
extension UILabel {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
I need to make the same one for UIImageView
but I don't want to copy that whole code. Is it possible to make an extension for multiple classes?
Thanks.
You could make a protocol and extend it.
Something like:
protocol Animations {
func animateHidden(flag: Bool)
}
extension Animations {
func animateHidden(flag: Bool) {
// some code
}
}
extension UILabel: Animations {}
extension UIImageView: Animations {}
Your method will be available for the extended classes:
let l = UILabel()
l.animateHidden(false)
let i = UIImageView()
i.animateHidden(false)
In a comment, you've asked: "in this case how to call self
for UILabel
and UIImageView
in animateHidden
function?". You do that by constraining the extension.
Example with a where
clause:
extension Animations where Self: UIView {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
Thanks to @Knight0fDragon for his excellent comment about the where
clause.