2016-02-03 8 views
5

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?

+0

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 –

Antwort

3

Die Antwort ist nein, es gibt derzeit keine Möglichkeit, das zu offenbaren.

Es ist jedoch, 3,0 für Swift betrachtet wird (siehe den Vorschlag here)

EDIT: Das ist falsch, wie

+0

Von dem, was ich in diesem Vorschlag zu lesen, ist es unter Berücksichtigung Swift Standardparameter verwendet, wenn ObjC APIs aussetzt, so dass Sie Dinge überspringen, die leicht vorbelegt werden können, wenn ObjC APIs _From Aufruf Schnell_. Das ist großartig, aber ich suche nach der anderen Richtung - es sei denn, ich lese etwas falsch oder übersehe etwas. –

+0

[Dies ist der Abschnitt I auf mich beziehen] (https://github.com/apple/swift-evolution/blob/master/proposals/0005-objective-c-name-translation.md#add-default-arguments) beschreibt die Änderungen, die Sie an Ihrem Swift-Code vornehmen können, um diese potenzielle Funktion zu nutzen. –

+0

@AdamS Sie haben sehr Recht. Ich entrahmte den Titel in der Mailing-Liste und Annahmen (Ich hätte den Titel dieses Vorschlags berücksichtigt) – ssrobbi

Verwandte Themen