2015-09-23 12 views
5

Ho due metodi nella libreria oggettivo-c che, dopo la conversione in Swift, sembrano avere la stessa firma del metodo. Essi sono i seguenti in Objective-C:Le firme del metodo Objective-C sono le stesse dopo la conversione Swift

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

Da quello che ho letto la conversione su Swift di metodi che utilizzano NSErrors + valori di ritorno BOOL in Objective-C, questi metodi finiscono per avere i seguenti Swift Metodo Firme:

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

Poiché la prima chiamata viene effettivamente sconsigliato in Objective-C, c'è un modo per forzare le chiamate effettuate a questo metodo per usare la seconda firma (quella che posso approfittare degli errori gettati)?

Sto cercando di chiamare il metodo nel modo seguente:

do { 
    try myObjectInstance.doSomething(self) 
} catch let error as NSError { 
    print(error) 
} 

Questo approccio sembra di default alla prima dichiarazione, che mi sta dando un avvertimento che a) il metodo è deprecato e b) non c'è niente da catturare perché non vengono lanciati errori.

risposta

0

È possibile utilizzare la macro NS_SWIFT_UNAVAILABLE per segnare non disponibile ai Swift:

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

Poi il compilatore Swift sceglierà l'unico metodo disponibile, che è l'altro.

(Nel mio test questo sembra rompere completamento automatico - si consiglia di file a bug di questo.)

+0

Oh, un aggiornamento della libreria sarebbe un peccato se questo è l'unico modo in cui questo può essere fatto. Detto questo, meglio una soluzione che nessuna! Grazie!! – Maixy

+0

Presumibilmente, puoi anche creare un metodo Obj-C separato (in una categoria o qualcosa) che è incluso nel target Swift solo per aiutare con l'interoperabilità, e chiama quello appropriato. – jtbandes

Problemi correlati