我有一个扩展:
extension UILabel {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
我需要为UIImageView
制作相同的代码,但我不想复制整个代码。是否可以为多个类进行扩展?
谢谢。
您可以制定协议并对其进行扩展。
像这样的东西:
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)
在评论中,您问:“在这种情况下,如何在动画隐藏
函数中为UILabel
和UIImageView
调用self
?”。您可以通过约束扩展来做到这一点。
带有where
子句的示例:
extension Animations where Self: UIView {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
感谢@Knight 0fDragon对where
子句的精彩评论。
在您的情况下,更好的方法是扩展UIView
。这是因为UILabel
和UIImageView
都继承自UIView
。
extension UIView {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
标签和图像的声明View:
label = UILabel()
imageView = UIImageView()
扩展的实际用法
label.animateHidden(flag: true)
imageView.animateHidden(flag: false)
如果您希望您的扩展能够符合许多不同类型的UI组件,那么有4种类型的UI组件符合:
C Var Arg
E qua table
可哈希
NS编码
许多UI组成部分包括:
>
UILabel:CVarArg
、Equable
、Has可散列
、NSCoding
UITextField:CVarArg
,Equable
,可散列
,NSCoding
UITableViewCell:CVarArg
、Equable
、Hasable
、NSCoding
UITextView:CVarArg
、Equ可转换
、可散列
、NSCoding
UITableView:CVarArg
、Equ可转换
、可散列
、NSCoding
UIImage:CVarArg
、Equ可转换
、可散列
、NSCoding
UIPickerView:CVarArg
、Equ可转换
、可散列
、NSCoding
UIView:CVarArg
、Equ可转换
、可散列
、NSCoding
UIImageView:CVarArg
、Equ可转换
、可散列
、NSCoding
UINavigationBar:CVarArg
、Equable
、Hasable
、NSCoding
UIButton:CVarArg
、Equ可转换
、可散列
、NSCoding
UIBarButtonItem:CVarArg
、Equ可转换
、可散列
、NSCoding
UIStackView:CVarArg
、Equ可转换
、可散列
、NSCoding
UIToolbar:CVarArg
、Equ可转换
、可散列
、NSCoding
UITabBar:CVarArg
、Equ可转换
、可散列
、NSCoding
UITabBarItem:CVarArg
、Equ可转换
、可散列
、NSCoding
UIScrollView:CVarArg
、Equ可转换
、可散列
、NSCoding
UISplitViewController:CVarArg
、Equable
、Hasable
、NSCoding
UIViewController:CVarArg
、Equable
、Hasable
、NSCoding
UIScreen:CVarArg
用户界面:CVarArg
、可均衡
、可散列
、NSCoding
UISlider:CVarArg
、Equable
、Hasable
、NSCoding
UIAlertAction:CVarArg
UIAlertController:CVarArg
、Equable
、Hasable
、NSCoding
UIImageAsset:CVarArg
、Equ可转换
、可散列
、NSCoding
UIDatePicker:CVarArg
、Equable
、Hasable
、NSCoding
UINib:CVarArg
用户响应器:CVarArg
UIWindow:CVarArg
,Equable
,可散列
,NSCoding
UIRegion:CVarArg
、Equ可转换
、可散列
、NSCoding
UIControl:CVarArg
、Equ可转换
、可散列
、NSCoding
UIBezierPath:CVarArg
、Equable
、Hasable
、NSCoding
UIVisualEffect:CVarArg
、Equ可转换
、可散列
、NSCoding
UISearchBar:CVarArg
、Equable
、Hasable
、NSCoding
UIMenuItem:CVarArg
UIMenuController:CVarArg
UIStoryboard:CVarArg
还有更多…
无论如何,我希望这一切都能帮助您解决问题,如果您有任何问题,建议等,请随时提问!