Dan*_*nny 25 ios swift swift-extensions
我有一个扩展名:
extension UILabel {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
Run Code Online (Sandbox Code Playgroud)
我需要制作相同的,UIImageView
但我不想复制整个代码.是否可以为多个类进行扩展?
谢谢.
aya*_*aio 57
您可以制定协议并对其进行扩展.
就像是:
protocol Animations {
func animateHidden(flag: Bool)
}
extension Animations {
func animateHidden(flag: Bool) {
// some code
}
}
extension UILabel: Animations {}
extension UIImageView: Animations {}
Run Code Online (Sandbox Code Playgroud)
您的方法可用于扩展类:
let l = UILabel()
l.animateHidden(false)
let i = UIImageView()
i.animateHidden(false)
Run Code Online (Sandbox Code Playgroud)
在一个评论,你问:"在这种情况下,如何调用self
了UILabel
和UIImageView
在animateHidden
功能?".您可以通过约束扩展来实现.
带where
子句的示例:
extension Animations where Self: UIView {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
Run Code Online (Sandbox Code Playgroud)
感谢@ Knight0fDragon对该where
条款的出色评论.
UILabel
与UIImageView
一起在您的情况下执行此操作的更好方法是扩展UIView
. 这工作,因为这两个UILabel
和UIImageView
两个继承UIView
。
extension UIView {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
Run Code Online (Sandbox Code Playgroud)
animateHidden(flag: Bool)
扩展label 和 imageView 的声明:
label = UILabel()
imageView = UIImageView()
Run Code Online (Sandbox Code Playgroud)
扩展的实际使用
label.animateHidden(flag: true)
imageView.animateHidden(flag: false)
Run Code Online (Sandbox Code Playgroud)
如果您希望您的扩展能够符合许多不同类型的 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
用户界面: 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
接口: CVarArg
用户界面响应者: 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
界面菜单项: CVarArg
UIMenuController: CVarArg
UI故事板: CVarArg
还有很多...
CVarArg
,Equatable
,Hashable
,或者NSCoding
,你可以扩展大多数(如果每不是每个)UI组件。
无论如何,我希望这一切都可以帮助您解决问题,如果您有任何问题、建议等,请随时提出!
归档时间: |
|
查看次数: |
11282 次 |
最近记录: |