2015-08-26 12 views
12

removeObserver: etrafında @try/@catch bloğu bulunan bir Obj-c sınıfını yeniden yapıyorum.Swift 2: Atış yapmayan bir işlevi yakala/dene

Aynı şeyi hızlı bir şekilde yapmak, removeObserver 0'dan beri bir uyarıyı tetikler (gözlemci olmadığında) ancak hata atmaz.

Aynı davranışı nasıl başarabileceğime dair bir fikriniz var mı?

düzenleme: Kodum: sadece try { } kaldırmak

try { 
    self.removeObserver(self, forKeyPath: "LineDisplayChanged") 
} 

cevap

0

uyarıyı kaldırmak için. removeObserver:forKeyPath: bir istisna atıyor ve bir hata vermiyor. Ve Swift'deki istisnaları yakalayamazsınız, bu nedenle bu yöntemi çağırdığınızdan emin olun, aksi takdirde onu gözlemlerseniz çarpılır ve Swift'de hiçbir şekilde yol yoktur.

Bu çağrıyı saran ve istisnayı yakalayan ve bunun yerine bir hata döndüren Objective-C'de bir kategori yazabilirsiniz.

+0

Uyarı: '' İfade 'ifadesi içinde, atma işlevlerine çağrı yapılmaz. Çok önemli değil ama kodumdaki uyarıları sevmiyorum :) –

+0

Kodunuzu gönderir misiniz? –

+0

Lütfen düzenlememe bakın. –

1

Aramak istediğiniz func removeObserver(_ anObserver: NSObject,forKeyPath keyPath: String)NSKeyValueObserving protokolüdür ve herhangi bir özel durum atar. Ayrıca

, Swift 2 (aslında errortype enum alt sınıfları) istisna sözdizimi o değişti unutmayın ve şimdi böyle bir şey olur:

do{ 
    try functionThrowingExceptions() 

}catch ErrorTypeSubclassEnum.Value { 
    // Do something 
}catch ErrorType { 
    // Do something, catches everything else 
} 

fazla bilgi için this post bakınız.

Not: En son XCode7 beta sürümüyle KVO kullanıyorum, self.removeObserver(self, forKeyPath: "path") yapmak herhangi bir hata/uyarı tetiklemiyor.

İlgili konular