2016-08-30 1 views
7

Ich habe eine ähnliche Funktion wie folgt aus:den gleichen Wert für mehrere schnellen Einstellen von Parametern

func stamp(documentURL: NSURL, saveURL: NSURL) { 
     ...} 

Ich möchte in der Lage sein, jemanden zu ermöglichen, diese beiden Parameter zu setzen, wenn sie wollen. Aber wenn sie nur den ersten Parameter setzen, würde ich gerne saveURL = documentURL haben. Gibt es eine Möglichkeit, dies in der Funktionsdeklaration zu tun?

Antwort

1

keine Möglichkeit Es gibt diese in t zu tun Die Funktion deklariert sich selbst, Sie können dies jedoch in einer einzigen Zeile des Funktionskörpers tun, indem Sie einen optionalen Parameter mit dem Standardwert nil und nil coalescing operator verwenden.

func stamp(documentURL: NSURL, saveURL: NSURL? = nil) { 
    let saveURL = saveURL ?? documentURL 

    // ... 
} 

Der Vorteil es auf diese Weise zu tun, ist, dass saveURL innerhalb der Funktionskörper nicht optional ist, müssen Sie Speichern später die Kraft unwrap Operator verwenden.

1

SWIFT 2

func stamp(documentURL: NSURL, var saveURL: NSURL? = nil) { 
    if saveURL == nil { 
     saveURL = documentURL 
    } 
} 

SWIFT 3

func stamp(documentURL: NSURL, saveURL: NSURL? = nil) { 
    var saveURL = saveURL 
    if saveURL == nil { 
     saveURL = documentURL 
    } 
} 
+0

Die Verwendung von 'var' wird in Swift-Funktionen nicht empfohlen, da es in Swift 3 entfernt wird. Erstellen Sie einfach eine lokale Variable mit demselben Namen. – ozgur

+0

@ozgur danke ich aktualisierte die schnelle 3 sichere Version –

+0

Also, ich denke, es gibt keine Möglichkeit, in der Funktionsdeklaration zu tun? –

3

In Swift 2.3, 3:

func stamp(documentURL: NSURL, saveURL: NSURL?) { 
    var saveURL = saveURL 
    if saveURL == nil { 
     saveURL = documentURL 
    } 
} 
+0

Es gilt auch für Swift 2.3. – ozgur

+0

Danke @ozgur – pedrouan

+0

Ich denke, es gibt keine Möglichkeit, dies in der Funktionsdeklaration ohne Code im Körper zu tun? –

Verwandte Themen