2016-07-19 18 views
12

Swift farklı sınıflardan uzantısı yapmak. Birden fazla sınıf için bir uzantı yapmak mümkün mü?Nasıl bir uzantı var

Teşekkürler.

+2

Yalnızca "UIView" uzantısını kullanabilir misiniz? 'AnimateHidden' – Kevin

+0

@Kevin uygulamasına bağlı olacaktır. 'AnimateHidden' tüm kodu 'UILabel', 'UIImageView' – Danny

cevap

30

Protokol yapabilir ve genişletebilirsiniz.

şey gibi:

genişletilmiş sınıflar için kullanılabilir olacak Yöntemin

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) 

bir yorumda, Sorduğunuz: "Bu durumda UILabel için self çağırmak nasıl ve animateHidden'da UIImageView işlevi? ". Bunu uzantıyı kısıtlayarak yaparsınız. Bir where maddesi ile

Örnek: where maddesi konusundaki mükemmel yorum için @ Knight0fDragon için

extension Animations where Self: UIView { 
    func animateHidden(flag: Bool) { 
     self.hidden = flag 
    } 
} 

teşekkürler.

+0

' sınıfları için yararlı olacaktır. Bu durumda 'self '' UILabel' ve 'UIImageView' için nasıl çağrılır animateHidden işlevinde? – Danny

+3

@Danny, bir where cümlesi ekleyin. '' Selfly: UIView' uzantısı olan animasyonlar '' ULiew' – Knight0fDragon

+0

Ancak, “Self: UIImageView” uzantısı olan Animasyonları yapmak ve “animateHidden (flag:)” için aynı uygulamayı yeniden üretmek zorunda değil misiniz? Bu tür uygulama kodunu yeniden kullanma amacını ortadan kaldırır. – HuaTham

İlgili konular