2015-09-23 11 views
5

Hedef-c kitaplığımda Swift'e dönüşten sonra, aynı yöntem imzasına sahip iki yöntemim var. Objective-C Bunlar şunlardır: Objective-C NSErrors + BOOL dönüş değerlerini kullanarak yöntemlerin yaklaşık Swift dönüşüm okuduğum kadarıylaObjective-C yöntem imzaları, Swift dönüşümden sonra aynıdır

- (void)doSomething:(UIViewController *)viewController __attribute__((deprecated)); 
- (BOOL)doSomething:(UIViewController *)viewController error:(NSError **)error; 

, bu yöntemler aşağıdaki Swift Yöntemi İmzalar sahip sona erecek: ilk arama aslında Objective-C önerilmiyor yana

func doSomething(viewController: UIViewController) 
func doSomething(viewController: UIViewController) throws 

, ikinci imzayı (I atılan hataların yararlanabilir sağlamak) kullanmak için bu yönteme yapılan çağrılar zorlamak için bir yol var?

aşağıdaki şekilde yöntemini çağırmak çalışıyorum:

do { 
    try myObjectInstance.doSomething(self) 
} catch let error as NSError { 
    print(error) 
} 
Bu yaklaşım) yöntemi kaldırılmış olduğunu bana bir uyarı veriyor ilk açıklamada, varsayılan olarak görünüyor

ve b) Yakalanacak hiçbir şey yok çünkü hiçbir hata atılmıyor.

cevap

0

Bunu kullanılamaz Swift için işaretlemek için NS_SWIFT_UNAVAILABLE makro kullanabilirsiniz:

- (void)doSomething:(UIViewController *)viewController 
    __attribute__((deprecated)) NS_SWIFT_UNAVAILABLE("use the throwing variant"); 

Sonra Swift derleyici diğeri yalnızca yöntemi, seçecektir.

(benim testlerde bu otomatik tamamlama kırmak gibi görünüyor - Bu konuda file a bug isteyebilirsiniz.) Bu yapılabileceğini tek yolu ise

+0

Ah, kütüphane güncelleme talihsiz olurdu. Bu, hiç yoktan daha iyi bir çözüm dedi! Teşekkürler!! – Maixy

+0

Muhtemelen, Swift hedefi içinde yer alan ayrı bir Obj-C yöntemini (bir kategoride veya bir şeyde), yalnızca birlikte çalışma konusunda yardımcı olmak için kullanabilir ve uygun olanı çağırırsınız. – jtbandes

İlgili konular