我有一个扩展名:
extension UILabel {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
我需要为UIImageView
制作同一个,但我不想复制整个代码。是否可以为多个类进行扩展?
感谢。
答案 0 :(得分:49)
您可以制定协议并对其进行扩展。
类似的东西:
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
条款的出色评论。
答案 1 :(得分:4)
UILabel
&的最佳方法UIImageView
一起在您的情况下,更好的方法是扩展UIView
。这是有效的,因为UILabel
和UIImageView
都继承自UIView
。
extension UIView {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
animateHidden(flag: Bool)
扩展 标签声明和imageView :
label = UILabel()
imageView = UIImageView()
扩展程序的实际用法
label.animateHidden(flag: true)
imageView.animateHidden(flag: false)
如果您希望扩展程序能够符合许多不同类型的UI组件,则有4种类型的UI组件符合这些类型:
CVarArg
强> Equatable
强> Hashable
强> NSCoding
强> 许多UI组件中的一些包括:
UILabel: CVarArg
,Equatable
,Hashable
,NSCoding
UITextField: CVarArg
,Equatable
,Hashable
,NSCoding
UITableViewCell: CVarArg
,Equatable
,Hashable
,NSCoding
UITextView: CVarArg
,Equatable
,Hashable
,NSCoding
UITableView: CVarArg
,Equatable
,Hashable
,NSCoding
UIImage: CVarArg
,Equatable
,Hashable
,NSCoding
UIPickerView: CVarArg
,Equatable
,Hashable
,NSCoding
UIView: CVarArg
,Equatable
,Hashable
,NSCoding
UIImageView: CVarArg
,Equatable
,Hashable
,NSCoding
UINavigationBar: CVarArg
,Equatable
,Hashable
,NSCoding
UIButton: CVarArg
,Equatable
,Hashable
,NSCoding
UIBarButtonItem: CVarArg
,Equatable
,Hashable
,NSCoding
UIStackView: CVarArg
,Equatable
,Hashable
,NSCoding
UIToolbar: CVarArg
,Equatable
,Hashable
,NSCoding
UITabBar: CVarArg
,Equatable
,Hashable
,NSCoding
UITabBarItem: CVarArg
,Equatable
,Hashable
,NSCoding
UIScrollView: CVarArg
,Equatable
,Hashable
,NSCoding
UISplitViewController: CVarArg
,Equatable
,Hashable
,NSCoding
UIViewController: CVarArg
,Equatable
,Hashable
,NSCoding
UIScreen: CVarArg
UISwitch: CVarArg
,Equatable
,Hashable
,NSCoding
UISlider: CVarArg
,Equatable
,Hashable
,NSCoding
UIAlertAction: CVarArg
UIAlertController: CVarArg
,Equatable
,Hashable
,NSCoding
UIImageAsset: CVarArg
,Equatable
,Hashable
,NSCoding
UIDatePicker: CVarArg
,Equatable
,Hashable
,NSCoding
UINib: CVarArg
UIResponder: CVarArg
UIWindow: CVarArg
,Equatable
,Hashable
,NSCoding
UIRegion: CVarArg
,Equatable
,Hashable
,NSCoding
UIControl: CVarArg
,Equatable
,Hashable
,NSCoding
UIBezierPath: CVarArg
,Equatable
,Hashable
,NSCoding
UIVisualEffect: CVarArg
,Equatable
,Hashable
,NSCoding
UISearchBar: CVarArg
,Equatable
,Hashable
,NSCoding
UIMenuItem: CVarArg
UIMenuController: CVarArg
UIStoryboard: CVarArg
还有更多......
CVarArg
,Equatable
,Hashable
或NSCoding
,您可以扩展大部分(如果不是每个)UI组件。
好吧无论如何,我希望这一切都可以帮助您解决问题,如果您有任何问题,建议等,请随时提出!