sagen, dass ich einige Swift-Klasse mit Methoden habe ich zu Objective-C aussetzen möchten:Kann ich die Swift-Standardparameterwerte für Objective-C bereitstellen?
@objc(Worker) class Worker : NSObject {
func performWork(label: String = "Regular Work") {
// Perform work
}
}
ich dies auf zwei Arten aufrufen:
Worker().performWork()
Worker().performWork("Swift Development")
Wenn jedoch von objektiv-aufgerufen C, ich habe nicht die "Standard" Version dieser Methode - ich Muss liefere ein Label:
[[[Worker alloc] init] performWork:@"Obj-C Development"];
Siehe die Definition von m y AppName-Swift.h
Header unter:
SWIFT_CLASS_NAMED("Worker")
@interface Worker : NSObject
- (void)performWork:(NSString * __nonnull)label;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
würde ich erwarten eine Methode mit dieser Signatur zu sehen:
- (void)performWork;
Ich weiß, ObjC nicht Standard-Parameterwerte nicht unterstützt, aber meine Vermutung war, dass die Swift Standardwerte erzeugen einfach zusätzliche Swift-Funktionen mit trivialen Implementierungen, die die "echte" Funktion aufrufen (d. h sie sind syntaktischer Zucker, der die typical implementation versteckt, die wir in Obj-C verwenden würden).
Gibt es eine Möglichkeit, diesen Standardwert zu Objective-C verfügbar zu machen? Wenn nicht, kann mir jemand auf irgendeine Dokumentation hinweisen, warum dies nicht verfügbar ist?
von Adam S. wies darauf hin, ich bezweifle, werden Sie einen besseren Grund als „Apfel bekommen ist zu beschäftigt, um daran zu kommen ". Auf der WWDC im letzten Jahr waren alle Gespräche über Swift. ObjC erhält nur 2 neue Funktionen: NULL-Zulässigkeit Marker und Generika –