2016-03-30 26 views
3

O zamanlar properties'i Swift ile extension arasında düzenlemek mümkün müdür?Swift extension olay dinleyicisi property

Böyle bir şey yapmak istiyorum.

extension UIGestureRecognizer { 
    var state: UIGestureRecognizerState { 
     didSet(state) { 
      self.stateChanged(state) 
     } 
} 

cevap

1

Sen UIGestureRecognizer 'ın state özelliğinin uygulanmasını değiştiremez. state'u herkese açık olarak ayarlayıp ayarlayabilirseniz, iletilen ve state olarak ayarlanmış farklı bir hesaplanmış özellik myState oluşturabilirsiniz. Maalesef yapamazsın. Bununla birlikte KVO (Key Value Observing) kullanarak bunu yapabilirsiniz.

İlk kapalı, bizim jest için KVO bildirimlerine yanıt verebilecek bir nesne oluşturur ve state özelliği çağrıldığında çağrılan observeValueForKeyPath uygular.

class StateObserver : NSObject { 
    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
     if let gesture = object as? UIGestureRecognizer { 
      gesture.stateChanged(gesture.state) 
     } 
    } 
} 

İkincisi, tap.state değiştiğinde bildirim almak için bir StateObserver örneğini kaydettirin.

let stateObserver = StateObserver() 
let tap = UITapGestureRecognizer() 
tap.addObserver(stateObserver, forKeyPath: "state", options: [.New, .Old], context: nil) 

Üçüncü olarak, bitirdiniz kez StateObserver kaydını unutmayın.

tap.removeObserver(stateObserver, forKeyPath: "state'") 
+0

Gözlemciyi ne zaman çıkarırsınız? Eğer bir UITapGesture örneğinde olduğu gibi, her zaman orada olmak için birden fazla dokunuş olması gerekmez mi? –

+0

Artık bildirim almak istemediğinizde, gözlemciyi kaldırmanız konusunda haklısınız. Bir örnek, ekranda görüntülendiğinde ve görünümü kaldırıldığında gözlemciyi çıkardığında gözlemciyi ekleyecektir. – Kevin