Kann ich Swift-Standardparameterwerte für Objective-C verfügbar machen?
Sag, ich habe eine Swift-Klasse mit Methoden, die ich Objective-C aussetzen möchte:
@objc(Worker) class Worker : NSObject {
func performWork(label: String = "Regular Work") {
// Perform work
}
}
Ich kann dies auf zwei Arten aufrufen:
Worker().performWork()
Worker().performWork("Swift Development")
Wenn ich jedoch von Objective-C aus aufrufe, erhalte ich nicht die "Standard" -Version dieser Methode - IMus ein Etikett bereitstellen:
[[[Worker alloc] init] performWork:@"Obj-C Development"];
Siehe die Definition aus meinemAppName-Swift.h
Header unten:
SWIFT_CLASS_NAMED("Worker")
@interface Worker : NSObject
- (void)performWork:(NSString * __nonnull)label;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
Ich würdeerwarten vo um eine Methode mit dieser Signatur zu sehen:
- (void)performWork;
Mir ist klar, dass ObjC keine Standardparameterwerte unterstützt, aber meine Annahme war, dass die Swift-Standardwerte einfach zusätzliche Swift-Funktionen mit trivialen Implementierungen generieren, die die "echte" Funktion aufrufen (d. H. Sie sind syntaktischer Zucker, der das @ verbirgttypische Implementierung Wir würden in Obj-C) verwenden.
Gibt es eine Möglichkeit, diesen Standardwert für Objective-C verfügbar zu machen? Wenn nicht, kann mir jemand Aufschluss darüber geben, warum dies nicht möglich ist?