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?
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 –