如何为多个 类 Swift 进行扩展
How to make extension for multiple classes Swift
我有一个分机:
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)
在评论中,您提出了以下问题:"in this case how to call self
for UILabel
and UIImageView
in animateHidden
function?"。您可以通过限制扩展来做到这一点。
带有 where
子句的示例:
extension Animations where Self: UIView {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
感谢@Knight0fDragon 对 where
条款的精彩评论。
一起扩展 UILabel
和 UIImageView
的最佳方法
Swift 4.1 / Xcode 9.4
在您的情况下,更好的方法是扩展 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 组件符合
如果您希望您的扩展能够符合许多不同类型的 UI 组件,有 4 种类型是大量 UI 组件符合的:
CVarArg
Equatable
Hashable
NSCoding
许多 UI 组件中的一些组件包括:
UI标签: CVarArg
, Equatable
, Hashable
, NSCoding
UITextField: CVarArg
, Equatable
, Hashable
, NSCoding
UITableViewCell: CVarArg
, Equatable
, Hashable
, NSCoding
UITextView: CVarArg
, Equatable
, Hashable
, NSCoding
UITableView: CVarArg
, Equatable
, Hashable
, NSCoding
UI图片: CVarArg
, Equatable
, Hashable
, NSCoding
UIPickerView: CVarArg
, Equatable
, Hashable
, NSCoding
UI视图: CVarArg
, Equatable
, Hashable
, NSCoding
UIImageView: CVarArg
, Equatable
, Hashable
, NSCoding
UI导航栏: CVarArg
, Equatable
, Hashable
, NSCoding
UI按钮: CVarArg
, Equatable
, Hashable
, NSCoding
UIBarButtonItem: CVarArg
, Equatable
, Hashable
, NSCoding
UIStackView: CVarArg
, Equatable
, Hashable
, NSCoding
UI工具栏: CVarArg
, Equatable
, Hashable
, NSCoding
UITabBar: CVarArg
, Equatable
, Hashable
, NSCoding
UITabBarItem: CVarArg
, Equatable
, Hashable
, NSCoding
UIScrollView: CVarArg
, Equatable
, Hashable
, NSCoding
UI拆分ViewController: CVarArg
, Equatable
, Hashable
, NSCoding
UIViewController: CVarArg
, Equatable
, Hashable
, NSCoding
UI屏幕: CVarArg
UI开关: CVarArg
, Equatable
, Hashable
, NSCoding
UI滑块: CVarArg
、Equatable
、Hashable
、NSCoding
UIAlertAction: CVarArg
UIAlertController: CVarArg
, Equatable
, Hashable
, NSCoding
UIImageAsset: CVarArg
, Equatable
, Hashable
, NSCoding
UIDatePicker: CVarArg
, Equatable
, Hashable
, NSCoding
UI笔尖: CVarArg
UI回复者: CVarArg
UIWindow: CVarArg
, Equatable
, Hashable
, NSCoding
UI地区: CVarArg
, Equatable
, Hashable
, NSCoding
UI控制: CVarArg
, Equatable
, Hashable
, NSCoding
UIBezierPath: CVarArg
, Equatable
, Hashable
, NSCoding
UIVisualEffect: CVarArg
, Equatable
, Hashable
, NSCoding
UI搜索栏: CVarArg
, Equatable
, Hashable
, NSCoding
UI菜单项: CVarArg
UI菜单控制器: CVarArg
UI故事板: CVarArg
还有很多...
这意味着通过扩展 CVarArg
、Equatable
、Hashable
或 NSCoding
,您可以扩展大部分(如果不是每个)UI 组件。
无论如何,我希望这一切能帮助您解决问题,如果您有任何问题、建议等,请随时提出!
我有一个分机:
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)
在评论中,您提出了以下问题:"in this case how to call self
for UILabel
and UIImageView
in animateHidden
function?"。您可以通过限制扩展来做到这一点。
带有 where
子句的示例:
extension Animations where Self: UIView {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
感谢@Knight0fDragon 对 where
条款的精彩评论。
一起扩展 UILabel
和 UIImageView
的最佳方法
Swift 4.1 / Xcode 9.4
在您的情况下,更好的方法是扩展 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 组件符合
如果您希望您的扩展能够符合许多不同类型的 UI 组件,有 4 种类型是大量 UI 组件符合的:
CVarArg
Equatable
Hashable
NSCoding
许多 UI 组件中的一些组件包括:
UI标签:
CVarArg
,Equatable
,Hashable
,NSCoding
UITextField:
CVarArg
,Equatable
,Hashable
,NSCoding
UITableViewCell:
CVarArg
,Equatable
,Hashable
,NSCoding
UITextView:
CVarArg
,Equatable
,Hashable
,NSCoding
UITableView:
CVarArg
,Equatable
,Hashable
,NSCoding
UI图片:
CVarArg
,Equatable
,Hashable
,NSCoding
UIPickerView:
CVarArg
,Equatable
,Hashable
,NSCoding
UI视图:
CVarArg
,Equatable
,Hashable
,NSCoding
UIImageView:
CVarArg
,Equatable
,Hashable
,NSCoding
UI导航栏:
CVarArg
,Equatable
,Hashable
,NSCoding
UI按钮:
CVarArg
,Equatable
,Hashable
,NSCoding
UIBarButtonItem:
CVarArg
,Equatable
,Hashable
,NSCoding
UIStackView:
CVarArg
,Equatable
,Hashable
,NSCoding
UI工具栏:
CVarArg
,Equatable
,Hashable
,NSCoding
UITabBar:
CVarArg
,Equatable
,Hashable
,NSCoding
UITabBarItem:
CVarArg
,Equatable
,Hashable
,NSCoding
UIScrollView:
CVarArg
,Equatable
,Hashable
,NSCoding
UI拆分ViewController:
CVarArg
,Equatable
,Hashable
,NSCoding
UIViewController:
CVarArg
,Equatable
,Hashable
,NSCoding
UI屏幕:
CVarArg
UI开关:
CVarArg
,Equatable
,Hashable
,NSCoding
UI滑块:
CVarArg
、Equatable
、Hashable
、NSCoding
UIAlertAction:
CVarArg
UIAlertController:
CVarArg
,Equatable
,Hashable
,NSCoding
UIImageAsset:
CVarArg
,Equatable
,Hashable
,NSCoding
UIDatePicker:
CVarArg
,Equatable
,Hashable
,NSCoding
UI笔尖:
CVarArg
UI回复者:
CVarArg
UIWindow:
CVarArg
,Equatable
,Hashable
,NSCoding
UI地区:
CVarArg
,Equatable
,Hashable
,NSCoding
UI控制:
CVarArg
,Equatable
,Hashable
,NSCoding
UIBezierPath:
CVarArg
,Equatable
,Hashable
,NSCoding
UIVisualEffect:
CVarArg
,Equatable
,Hashable
,NSCoding
UI搜索栏:
CVarArg
,Equatable
,Hashable
,NSCoding
UI菜单项:
CVarArg
UI菜单控制器:
CVarArg
UI故事板:
CVarArg
还有很多...
这意味着通过扩展 CVarArg
、Equatable
、Hashable
或 NSCoding
,您可以扩展大部分(如果不是每个)UI 组件。
无论如何,我希望这一切能帮助您解决问题,如果您有任何问题、建议等,请随时提出!