2016-02-03 9 views
5

Dire che ho una certa classe Swift con i metodi mi piacerebbe esporre a Objective-C:Posso esporre i valori dei parametri di default di Swift a Objective-C?

@objc(Worker) class Worker : NSObject { 
    func performWork(label: String = "Regular Work") { 
     // Perform work 
    } 
} 

posso chiamare questo in due modi:

Worker().performWork() 
Worker().performWork("Swift Development") 

Tuttavia, quando chiamato da Objective- C, non ottenere la versione "default" di questo metodo - I must fornisco un'etichetta:

[[[Worker alloc] init] performWork:@"Obj-C Development"]; 

Vedi la definizione da m y AppName-Swift.h intestazione di seguito:

SWIFT_CLASS_NAMED("Worker") 
@interface Worker : NSObject 
- (void)performWork:(NSString * __nonnull)label; 
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; 
@end 

avrei aspetto di vedere un metodo con questa firma:

- (void)performWork; 

mi rendo conto objC non supporta i valori dei parametri di default, ma la mia ipotesi era che la Swift i valori predefiniti generano semplicemente funzioni Swift aggiuntive con implementazioni banali che chiamano la funzione "reale" (es sono lo zucchero sintattico che nasconde lo typical implementation che useremmo in Obj-C).

Esiste un modo per esporre questo valore predefinito a Objective-C? In caso contrario, qualcuno può indicarmi qualsiasi documentazione sul motivo per cui non è disponibile?

+0

dubito si otterrà una ragione migliore di "Apple è troppo occupato per arrivarci ". Al WWDC dello scorso anno tutti i discorsi riguardavano Swift. ObjC ottiene solo 2 nuove funzionalità: marcatori di valori Null e generici –

risposta

3

La risposta è no, non c'è attualmente modo di esporlo.

E 'comunque presa in considerazione per Swift 3.0 (si veda la proposta here)

EDIT: Questo non è corretto, come sottolineato da Adam S.

+0

Da quanto ho letto in quella proposta, sta considerando l'utilizzo dei parametri predefiniti di Swift durante l'esposizione delle API Obj-C, consentendo di saltare le cose che possono essere facilmente predefinite quando si chiamano le API Obj-C _from Swift_. Questo è fantastico, tuttavia sto cercando l'altra direzione - a meno che non mi fraintenda o trascuri qualcosa lì. –

+0

[Questa è la sezione a cui mi riferisco] (https://github.com/apple/swift-evolution/blob/master/proposals/0005-objective-c-name-translation.md#add-default-arguments) che descrive le modifiche che potresti apportare al tuo codice Swift per sfruttare questa potenziale funzionalità. –

+0

@AdamS Hai ragione. Ho sfogliato il titolo nella mailing list e ho fatto delle ipotesi (avrei dovuto prendere in considerazione il titolo di quella proposta) – ssrobbi

Problemi correlati