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 组件符合:
CVarArgEquatableHashableNSCoding许多 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 次 |
| 最近记录: |