私には拡張子があります:
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)
コメントで、「この場合、self
のUILabel
およびUIImageView
関数のanimateHidden
を呼び出す方法を尋ねました」。それを行うには、拡張機能を制限します。
where
句を使用した例:
extension Animations where Self: UIView {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
where
句に関する優れたコメントをしてくれた@ Knight0fDragonに感謝します。
UILabel
UIImageView
を一緒に拡張する最適な方法あなたのケースでこれを行うはるかに良い方法は、単にUIView
を拡張することです。これは、UILabel
とUIImageView
の両方がUIView
から継承するため機能します。
_extension UIView {
func animateHidden(flag: Bool) {
self.hidden = flag
}
}
_
animateHidden(flag: Bool)
Extensionの使用ラベルとimageViewの宣言:
_label = UILabel()
imageView = UIImageView()
_
拡張機能の実際の使用法
_label.animateHidden(flag: true)
imageView.animateHidden(flag: false)
_
拡張機能を多くの異なる種類のUIコンポーネントに適合させたい場合、非常に多くのUIコンポーネントが適合する4つのタイプがあります。
CVarArg
Equatable
Hashable
NSCoding
多くのUIコンポーネントの一部は次のとおりです。
ILabel:CVarArg
、Equatable
、Hashable
、NSCoding
ITextField:CVarArg
、Equatable
、Hashable
、NSCoding
ITableViewCell:CVarArg
、Equatable
、Hashable
、NSCoding
ITextView:CVarArg
、Equatable
、Hashable
、NSCoding
ITableView:CVarArg
、Equatable
、Hashable
、NSCoding
IImage:CVarArg
、Equatable
、Hashable
、NSCoding
IPickerView:CVarArg
、Equatable
、Hashable
、NSCoding
IView:CVarArg
、Equatable
、Hashable
、NSCoding
IImageView:CVarArg
、Equatable
、Hashable
、NSCoding
INavigationBar:CVarArg
、Equatable
、Hashable
、NSCoding
IButton:CVarArg
、Equatable
、Hashable
、NSCoding
IBarButtonItem:CVarArg
、Equatable
、Hashable
、NSCoding
IStackView:CVarArg
、Equatable
、Hashable
、NSCoding
IToolbar:CVarArg
、Equatable
、Hashable
、NSCoding
ITabBar:CVarArg
、Equatable
、Hashable
、NSCoding
ITabBarItem:CVarArg
、Equatable
、Hashable
、NSCoding
IScrollView:CVarArg
、Equatable
、Hashable
、NSCoding
ISplitViewController:CVarArg
、Equatable
、Hashable
、NSCoding
IViewController:CVarArg
、Equatable
、Hashable
、NSCoding
IScreen:CVarArg
ISwitch:CVarArg
、Equatable
、Hashable
、NSCoding
ISlider:CVarArg
、Equatable
、Hashable
、NSCoding
IAlertAction:CVarArg
IAlertController:CVarArg
、Equatable
、Hashable
、NSCoding
IImageAsset:CVarArg
、Equatable
、Hashable
、NSCoding
IDatePicker:CVarArg
、Equatable
、Hashable
、NSCoding
INib:CVarArg
IResponder:CVarArg
IWindow:CVarArg
、Equatable
、Hashable
、NSCoding
IRegion:CVarArg
、Equatable
、Hashable
、NSCoding
IControl:CVarArg
、Equatable
、Hashable
、NSCoding
IBezierPath:CVarArg
、Equatable
、Hashable
、NSCoding
IVisualEffect:CVarArg
、Equatable
、Hashable
、NSCoding
ISearchBar:CVarArg
、Equatable
、Hashable
、NSCoding
IMenuItem:CVarArg
IMenuController:CVarArg
IStoryboard:CVarArg
その他多数...
CVarArg
、Equatable
、Hashable
、またはNSCoding
のいずれかを拡張することで、ほとんど(すべてではない場合)UIコンポーネントを拡張できます。
とにかく、これがすべて問題の解決に役立つことを願っています。質問や提案などがあれば、お気軽にお問い合わせください。